diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b890c42..332d4da 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,9 +11,11 @@ jobs: - uses: actions/checkout@v4 - uses: subosito/flutter-action@v2 with: + flutter-version: '3.41.2' channel: stable cache: true - - run: flutter pub get + - run: flutter pub get --enforce-lockfile + - run: bash tool/build_epub_worker.sh --check - run: dart format --output=none --set-exit-if-changed lib test example/lib example/test tool - run: flutter analyze - run: flutter test @@ -23,6 +25,15 @@ jobs: working-directory: example - run: flutter build web working-directory: example + - uses: actions/setup-node@v4 + with: + node-version: '22' + - run: npm ci + working-directory: tool/browser + - run: npx playwright install --with-deps chromium + working-directory: tool/browser + - run: npm test + working-directory: tool/browser desktop-build: strategy: @@ -39,6 +50,7 @@ jobs: - uses: actions/checkout@v4 - uses: subosito/flutter-action@v2 with: + flutter-version: '3.41.2' channel: stable cache: true - run: sudo apt-get update && sudo apt-get install -y libgtk-3-dev @@ -46,4 +58,16 @@ jobs: - run: flutter pub get working-directory: example - run: flutter build ${{ matrix.target }} + if: matrix.target != 'macos' + working-directory: example + - run: flutter build macos --config-only --release + if: matrix.target == 'macos' + working-directory: example + # Flutter 3.41.2's universal build has an Xcode 27 architecture-check issue. + # Compile the runner architecture until flutter/flutter#188346 is fixed. + - run: >- + xcodebuild -workspace macos/Runner.xcworkspace -scheme Runner + -configuration Release -derivedDataPath build/macos -sdk macosx + ARCHS=$(uname -m) ONLY_ACTIVE_ARCH=YES CODE_SIGNING_ALLOWED=NO build + if: matrix.target == 'macos' working-directory: example diff --git a/.gitignore b/.gitignore index dd5eb98..6eec9dd 100644 --- a/.gitignore +++ b/.gitignore @@ -22,10 +22,11 @@ migrate_working_dir/ #.vscode/ # Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock +# This private package commits its lockfile to reproduce the packaged worker. **/doc/api/ .dart_tool/ .flutter-plugins-dependencies /build/ +/artifacts/ +node_modules/ /coverage/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..8232d80 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,33 @@ +# Papyrus reader + +This is an independent Flutter package and Git repository. The owning workspace +is one level up; use its `tools/flutter` and `tools/dart` SDK wrappers when present. +Read `docs/reader-plan.md` before changing architecture or expanding formats. + +- Domain types are host-facing and serializable. Keep version-1 locators readable. + EPUB content offsets are chapter-local normalized UTF-16 offsets, never page + numbers. Legacy CFI strings are compatibility data, not conformant anchors. +- The host owns bytes, persistence, routing and account/profile isolation. + Package engines own transient resources and must release them on cancellation. +- EPUB document processing is pure Dart in `lib/src/engine/epub/worker`. Native + isolates and browser workers use the same request/response protocol. Never + move ZIP, XML or chapter HTML parsing back onto the Flutter UI thread. +- Rebuild `assets/epub_worker.js` with `tool/build_epub_worker.sh` after modifying + worker source. The packaged JS lets dependent applications build without a + manual worker generation step. CI checks the generated asset for drift. + This private repository commits `pubspec.lock` and pins its CI SDK so the + browser worker and third-party notices are reproducible. +- UI text measurement belongs in Flutter. Preserve semantic runs, Unicode, + illustrations and content offsets when reflowing. Layout must use the space + left after panels, system insets and text scaling, not device width alone. +- Keep custom engines/renderers/builders usable. Don't silently expose settings + that the active engine cannot apply. +- Use in-process transport in widget tests with fake clocks; exercise native and + browser transports independently. Run `flutter analyze`, `flutter test`, and + example checks. Build web for conditional-import and worker changes. +- Client's Git-pinned reader is independent. Use an ignored local path override + for integration checks; update its release pin only to a committed revision. + +Native example Podfiles are intentional platform setup. Generated build/cache +folders are not source. Keep performance claims limited to measurements actually +made; synthetic tests do not certify arbitrary publisher content or every device. diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e1097d..e2646e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## Unreleased + +- Rebuild reader Material colors consistently, including popup backgrounds and + host-defined field labels, while preserving typography, geometry and motion. +- Process EPUB archives and chapters in cancellable native/browser workers. +- Follow OPF spine order independently of TOC hierarchy and restore TOC anchors. +- Add rich lazy pagination, adaptive spreads and page-first navigation. +- Preserve EPUB content offsets through typography and viewport changes. +- Keep reading viewports mounted during progress updates; add typeface controls, + consistent appearance and escapable loading/error screens. +- Share one pdfrx document between metadata and rendering; report PDF page offsets. +- Fit and turn bounded PDF pages/spreads in paginated mode; preserve scale on + appearance changes and refit after column, mode and viewport changes. +- Retain keyboard navigation across EPUB chapters and correct reader settings + colors under opposite host themes and in open mobile sheets. +- Add a long-chapter reading lab, architecture plan and platform integration guide. + ## 0.0.1 - Add reflowable EPUB 2/3 and PDF engines. diff --git a/README.md b/README.md index 558f692..e5d1590 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,12 @@ `papyrus_reader` is a self-contained Flutter library for reading reflowable EPUB 2/3 and PDF documents on Android, iOS, Web, Linux, macOS, and Windows. -It provides EPUB CFI locations, PDF page locations, TOC/outline navigation, +It provides versioned EPUB content locations, PDF page locations, TOC/outline navigation, scroll and paginated layouts, configurable appearance, and a responsive Material 3 reader shell. UI builders and theme data allow Papyrus to replace -the default chrome without forking the engines. +the default chrome without forking the engines. EPUB processing runs in a native +isolate or browser Worker; rich pagination preserves content across typography +changes and turns within chapters before crossing the document spine. The package deliberately has no Papyrus API, PowerSync, filesystem, routing, or state-management dependency. The host owns document bytes and persistence. @@ -20,14 +22,17 @@ dependencies: ``` ```dart +// Create once per book session and retain across host rebuilds. +final document = ReaderDocument( + id: book.id, + title: book.title, + author: book.author, + format: ReaderFormat.epub, + loadBytes: () => file.readAsBytes(), +); + PapyrusReader( - document: ReaderDocument( - id: book.id, - title: book.title, - author: book.author, - format: ReaderFormat.epub, - loadBytes: () => file.readAsBytes(), - ), + document: document, initialLocator: savedLocator, initialPreferences: savedPreferences, onLocatorChanged: saveLocator, @@ -41,6 +46,13 @@ provided `ReaderController` remains host-owned. With an external controller, omitted initial preferences remain controller-owned; an explicit value overrides them for the document load. +Use **Hide controls** in the toolbar for distraction-free reading. Both bars +collapse, expanding the page area without reopening the document. Page-turn +keys, EPUB swipes and PDF scrolling remain available. The small **Show controls** +button in the top corner or **Escape** restores the bars. This is temporary UI +state; opening another document restores the controls. Custom toolbar builders +can expose `ReaderToolbarContext.toggleControls`. + ## Example ```bash @@ -48,8 +60,10 @@ cd example flutter run ``` -The six-platform example includes deterministic EPUB/PDF assets, light and -dark themes, and in-memory position/preference restoration. +The six-platform example includes deterministic long EPUB and three-page PDF +assets, a local EPUB/PDF file picker, light/dark themes, and in-memory +position/preference restoration. Example positions reset when the app restarts; +production persistence belongs to the host application. ## Current scope @@ -58,6 +72,7 @@ return `ReaderErrorCode.unsupportedFixedLayout`. MOBI/AZW3, TXT, comic archives, search, bookmarks, highlights, and notes are planned extensions. - [Architecture](docs/architecture.md) +- [Core release plan](docs/reader-plan.md) - [Client integration](docs/integration.md) - [Supported formats](docs/supported-formats.md) @@ -66,7 +81,17 @@ archives, search, bookmarks, highlights, and notes are planned extensions. ```bash flutter analyze flutter test -cd example && flutter analyze && flutter test && flutter build web +./tool/build_epub_worker.sh +(cd example && flutter analyze && flutter test && flutter build web) +# From the reader repository, after building the example: +(cd tool/browser && npm ci && npx playwright install chromium && npm test) ``` +Use the parent workspace's pinned SDK wrappers when available. The generated +browser worker is packaged so host applications need no extra build step; rebuild +it after changing worker source. Browser CSP must allow `worker-src blob:`. +Use `tool/build_epub_worker.sh --check` to check asset drift. Browser checks can +use an installed Chrome via `PAPYRUS_CHROME_EXECUTABLE` and save screenshots via +`PAPYRUS_SCREENSHOT_DIR`. See [Validation](docs/validation.md) for platform coverage. + Licensed under AGPL-3.0. diff --git a/assets/epub_worker.NOTICES b/assets/epub_worker.NOTICES new file mode 100644 index 0000000..eaf7fa7 --- /dev/null +++ b/assets/epub_worker.NOTICES @@ -0,0 +1,536 @@ +Third-party licenses for the packaged EPUB browser worker. + + +======================================================================== +archive 4.2.0 +======================================================================== +The MIT License + +Copyright (c) 2013-2021 Brendan Duncan. +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", 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. + +======================================================================== +characters 1.4.1 +======================================================================== +Copyright 2019, the Dart project authors. + +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 LLC 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. + + +======================================================================== +collection 1.19.1 +======================================================================== +Copyright 2015, the Dart project authors. + +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 LLC 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. + + +======================================================================== +csslib 1.0.2 +======================================================================== +Copyright 2013, the Dart project authors. + +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 LLC 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. + + +======================================================================== +epub_pro 5.6.0 +======================================================================== +MIT License + +Copyright (c) 2017 Colin Nelson +Original repository: https://github.com/orthros/dart-epub + +Copyright (c) 2025 Walter Tay Ann Lee + +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. + + +BSD 3-Clause "New" or "Revised" License + +Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. +Original repository: https://github.com/readium/readium-sdk + +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. +3. Neither the name of the organization nor the names of its contributors may be +used to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER 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. + +======================================================================== +ffi 2.2.0 +======================================================================== +Copyright 2019, the Dart project authors. + +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 LLC 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. + + +======================================================================== +html 0.15.6 +======================================================================== +Copyright (c) 2006-2012 The Authors + +Contributors: +James Graham - jg307@cam.ac.uk +Anne van Kesteren - annevankesteren@gmail.com +Lachlan Hunt - lachlan.hunt@lachy.id.au +Matt McDonald - kanashii@kanashii.ca +Sam Ruby - rubys@intertwingly.net +Ian Hickson (Google) - ian@hixie.ch +Thomas Broyer - t.broyer@ltgt.net +Jacques Distler - distler@golem.ph.utexas.edu +Henri Sivonen - hsivonen@iki.fi +Adam Barth - abarth@webkit.org +Eric Seidel - eric@webkit.org +The Mozilla Foundation (contributions from Henri Sivonen since 2008) +David Flanagan (Mozilla) - dflanagan@mozilla.com +Google LLC (contributed the Dart port) - misc@dartlang.org + +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. + + +======================================================================== +image 4.9.2 +======================================================================== +The MIT License + +Copyright (c) 2013-2022 Brendan Duncan. +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", 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. + +======================================================================== +meta 1.17.0 +======================================================================== +Copyright 2016, the Dart project authors. + +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 LLC 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. + + +======================================================================== +path 1.9.1 +======================================================================== +Copyright 2014, the Dart project authors. + +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 LLC 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. + + +======================================================================== +petitparser 7.0.2 +======================================================================== +The MIT License + +Copyright (c) 2006-2024 Lukas Renggli. +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", 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. + + +======================================================================== +posix 6.5.2 +======================================================================== +MIT License + +Copyright (c) 2020 Brett Sutton + +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. + + +======================================================================== +source_span 1.10.2 +======================================================================== +Copyright 2014, the Dart project authors. + +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 LLC 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. + + +======================================================================== +term_glyph 1.2.2 +======================================================================== +Copyright 2017, the Dart project authors. + +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 LLC 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. + + +======================================================================== +web 1.1.1 +======================================================================== +Copyright 2023, the Dart project authors. + +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 LLC 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. + + +======================================================================== +word_count 1.0.4 +======================================================================== +MIT License + +Copyright (c) 2016 baozier +Original source: https://github.com/byn9826/words-count + +Copyright (c) 2023 Abdullah Atta +Original source: https://github.com/thecodrr/alfaaz + +Copyright (c) 2025 Walter Tay Ann Lee + +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. + + +======================================================================== +xml 6.6.1 +======================================================================== +The MIT License + +Copyright (c) 2006-2025 Lukas Renggli. +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", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/assets/epub_worker.js b/assets/epub_worker.js new file mode 100644 index 0000000..56dbb10 --- /dev/null +++ b/assets/epub_worker.js @@ -0,0 +1,20578 @@ +(function dartProgram(){function copyProperties(a,b){var s=Object.keys(a) +for(var r=0;r=0)return true +if(typeof version=="function"&&version.length==0){var q=version() +if(/^\d+\.\d+\.\d+\.\d+$/.test(q))return true}}catch(p){}return false}() +function inherit(a,b){a.prototype.constructor=a +a.prototype["$i"+a.name]=a +if(b!=null){if(z){Object.setPrototypeOf(a.prototype,b.prototype) +return}var s=Object.create(b.prototype) +copyProperties(a.prototype,s) +a.prototype=s}}function inheritMany(a,b){for(var s=0;s4294967295)throw A.f(A.af(a,0,4294967295,"length",null)) +return J.vY(new Array(a),b)}, +vX(a,b){if(a<0)throw A.f(A.W("Length must be a non-negative integer: "+a,null)) +return A.i(new Array(a),b.h("y<0>"))}, +rv(a,b){if(a<0)throw A.f(A.W("Length must be a non-negative integer: "+a,null)) +return A.i(new Array(a),b.h("y<0>"))}, +vY(a,b){var s=A.i(a,b.h("y<0>")) +s.$flags=1 +return s}, +vZ(a,b){var s=t.bP +return J.r8(s.a(a),s.a(b))}, +rx(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0 +default:return!1}switch(a){case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0 +default:return!1}}, +ry(a,b){var s,r +for(s=a.length;b0;b=r){r=b-1 +if(!(r").u(c).h("hb<1,2>")) +return new A.de(a,b.h("@<0>").u(c).h("de<1,2>"))}, +rA(a){return new A.e8("Field '"+a+"' has been assigned during initialization.")}, +q6(a){return new A.e8("Field '"+a+"' has not been initialized.")}, +w0(a){return new A.e8("Field '"+a+"' has already been initialized.")}, +pE(a){var s,r=a^48 +if(r<=9)return r +s=a|32 +if(97<=s&&s<=102)return s-87 +return-1}, +cz(a,b){a=a+b&536870911 +a=a+((a&524287)<<10)&536870911 +return a^a>>>6}, +nN(a){a=a+((a&67108863)<<3)&536870911 +a^=a>>>11 +return a+((a&16383)<<15)&536870911}, +dP(a,b,c){return a}, +qX(a){var s,r +for(s=$.bF.length,r=0;rc)A.P(A.af(b,0,c,"start",null))}return new A.cy(a,b,c,d.h("cy<0>"))}, +rE(a,b,c,d){if(t.gt.b(a))return new A.eU(a,b,c.h("@<0>").u(d).h("eU<1,2>")) +return new A.ba(a,b,c.h("@<0>").u(d).h("ba<1,2>"))}, +rZ(a,b,c){var s="takeCount" +A.hR(b,s,t.S) +A.aF(b,s) +if(t.gt.b(a))return new A.eV(a,b,c.h("eV<0>")) +return new A.dE(a,b,c.h("dE<0>"))}, +rX(a,b,c){var s="count" +if(t.gt.b(a)){A.hR(b,s,t.S) +A.aF(b,s) +return new A.dZ(a,b,c.h("dZ<0>"))}A.hR(b,s,t.S) +A.aF(b,s) +return new A.cx(a,b,c.h("cx<0>"))}, +bi(){return new A.dD("No element")}, +ru(){return new A.dD("Too many elements")}, +rt(){return new A.dD("Too few elements")}, +jM(a,b,c,d,e){if(c-b<=32)A.wN(a,b,c,d,e) +else A.wM(a,b,c,d,e)}, +wN(a,b,c,d,e){var s,r,q,p,o,n +for(s=b+1,r=J.ad(a);s<=c;++s){q=r.m(a,s) +p=s +for(;;){if(p>b){o=d.$2(r.m(a,p-1),q) +if(typeof o!=="number")return o.b1() +o=o>0}else o=!1 +if(!o)break +n=p-1 +r.k(a,p,r.m(a,n)) +p=n}r.k(a,p,q)}}, +wM(a3,a4,a5,a6,a7){var s,r,q,p,o,n,m,l,k,j=B.f.av(a5-a4+1,6),i=a4+j,h=a5-j,g=B.f.av(a4+a5,2),f=g-j,e=g+j,d=J.ad(a3),c=d.m(a3,i),b=d.m(a3,f),a=d.m(a3,g),a0=d.m(a3,e),a1=d.m(a3,h),a2=a6.$2(c,b) +if(typeof a2!=="number")return a2.b1() +if(a2>0){s=b +b=c +c=s}a2=a6.$2(a0,a1) +if(typeof a2!=="number")return a2.b1() +if(a2>0){s=a1 +a1=a0 +a0=s}a2=a6.$2(c,a) +if(typeof a2!=="number")return a2.b1() +if(a2>0){s=a +a=c +c=s}a2=a6.$2(b,a) +if(typeof a2!=="number")return a2.b1() +if(a2>0){s=a +a=b +b=s}a2=a6.$2(c,a0) +if(typeof a2!=="number")return a2.b1() +if(a2>0){s=a0 +a0=c +c=s}a2=a6.$2(a,a0) +if(typeof a2!=="number")return a2.b1() +if(a2>0){s=a0 +a0=a +a=s}a2=a6.$2(b,a1) +if(typeof a2!=="number")return a2.b1() +if(a2>0){s=a1 +a1=b +b=s}a2=a6.$2(b,a) +if(typeof a2!=="number")return a2.b1() +if(a2>0){s=a +a=b +b=s}a2=a6.$2(a0,a1) +if(typeof a2!=="number")return a2.b1() +if(a2>0){s=a1 +a1=a0 +a0=s}d.k(a3,i,c) +d.k(a3,g,a) +d.k(a3,h,a1) +d.k(a3,f,d.m(a3,a4)) +d.k(a3,e,d.m(a3,a5)) +r=a4+1 +q=a5-1 +p=J.N(a6.$2(b,a0),0) +if(p)for(o=r;o<=q;++o){n=d.m(a3,o) +m=a6.$2(n,b) +if(m===0)continue +if(m<0){if(o!==r){d.k(a3,o,d.m(a3,r)) +d.k(a3,r,n)}++r}else for(;;){m=a6.$2(d.m(a3,q),b) +if(m>0){--q +continue}else{l=q-1 +if(m<0){d.k(a3,o,d.m(a3,r)) +k=r+1 +d.k(a3,r,d.m(a3,q)) +d.k(a3,q,n) +q=l +r=k +break}else{d.k(a3,o,d.m(a3,q)) +d.k(a3,q,n) +q=l +break}}}}else for(o=r;o<=q;++o){n=d.m(a3,o) +if(a6.$2(n,b)<0){if(o!==r){d.k(a3,o,d.m(a3,r)) +d.k(a3,r,n)}++r}else if(a6.$2(n,a0)>0)for(;;)if(a6.$2(d.m(a3,q),a0)>0){--q +if(qh){while(J.N(a6.$2(d.m(a3,r),b),0))++r +while(J.N(a6.$2(d.m(a3,q),a0),0))--q +for(o=r;o<=q;++o){n=d.m(a3,o) +if(a6.$2(n,b)===0){if(o!==r){d.k(a3,o,d.m(a3,r)) +d.k(a3,r,n)}++r}else if(a6.$2(n,a0)===0)for(;;)if(a6.$2(d.m(a3,q),a0)===0){--q +if(q=m.length)return A.c(m,3) +s=m[3] +if(b==null){if(s!=null)return parseInt(a,10) +if(m[2]!=null)return parseInt(a,16) +return n}if(b<2||b>36)throw A.f(A.af(b,2,36,"radix",n)) +if(b===10&&s!=null)return parseInt(a,10) +if(b<10||s==null){r=b<=10?47+b:86+b +q=m[1] +for(p=q.length,o=0;or)return n}return parseInt(a,b)}, +qf(a){var s,r +if(!/^\s*[+-]?(?:Infinity|NaN|(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(a))return null +s=parseFloat(a) +if(isNaN(s)){r=B.b.ba(a) +if(r==="NaN"||r==="+NaN"||r==="-NaN")return s +return null}return s}, +jC(a){var s,r,q,p +if(a instanceof A.p)return A.be(A.b3(a),null) +s=J.ci(a) +if(s===B.iO||s===B.iQ||t.mK.b(a)){r=B.cM(a) +if(r!=="Object"&&r!=="")return r +q=a.constructor +if(typeof q=="function"){p=q.name +if(typeof p=="string"&&p!=="Object"&&p!=="")return p}}return A.be(A.b3(a),null)}, +rP(a){var s,r,q +if(a==null||typeof a=="number"||A.qL(a))return J.ay(a) +if(typeof a=="string")return JSON.stringify(a) +if(a instanceof A.b7)return a.j(0) +if(a instanceof A.bn)return a.hx(!0) +s=$.vd() +for(r=0;r<1;++r){q=s[r].oh(a) +if(q!=null)return q}return"Instance of '"+A.jC(a)+"'"}, +ww(){if(!!self.location)return self.location.href +return null}, +rN(a){var s,r,q,p,o=a.length +if(o<=500)return String.fromCharCode.apply(null,a) +for(s="",r=0;r65535)return A.wF(a)}return A.rN(a)}, +wG(a,b,c){var s,r,q,p +if(c<=500&&b===0&&c===a.length)return String.fromCharCode.apply(null,a) +for(s=b,r="";s>>0,s&1023|56320)}}throw A.f(A.af(a,0,1114111,null,null))}, +bz(a){if(a.date===void 0)a.date=new Date(a.a) +return a.date}, +wE(a){return a.c?A.bz(a).getUTCFullYear()+0:A.bz(a).getFullYear()+0}, +wC(a){return a.c?A.bz(a).getUTCMonth()+1:A.bz(a).getMonth()+1}, +wy(a){return a.c?A.bz(a).getUTCDate()+0:A.bz(a).getDate()+0}, +wz(a){return a.c?A.bz(a).getUTCHours()+0:A.bz(a).getHours()+0}, +wB(a){return a.c?A.bz(a).getUTCMinutes()+0:A.bz(a).getMinutes()+0}, +wD(a){return a.c?A.bz(a).getUTCSeconds()+0:A.bz(a).getSeconds()+0}, +wA(a){return a.c?A.bz(a).getUTCMilliseconds()+0:A.bz(a).getMilliseconds()+0}, +cZ(a,b,c){var s,r,q={} +q.a=0 +s=[] +r=[] +q.a=b.length +B.a.a1(s,b) +q.b="" +if(c!=null&&c.a!==0)c.T(0,new A.nt(q,r,s)) +return J.vo(a,new A.fj(B.Mv,0,s,r,0))}, +wv(a,b,c){var s,r=c==null||c.a===0 +if(r){if(!!a.$0)return a.$0() +s=a[""+"$0"] +if(s!=null)return s.apply(a,b)}return A.wu(a,b,c)}, +wu(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=a.$R +if(0n)return A.cZ(a,b,null) +if(0f)return A.cZ(a,b,c) +l=A.a7(b,t.z) +k=Object.keys(q) +if(c==null)for(r=k.length,j=0;j=s)return A.iM(b,s,a,null,r) +return A.nu(b,r)}, +yZ(a,b,c){if(a<0||a>c)return A.af(a,0,c,"start",null) +if(b!=null)if(bc)return A.af(b,a,c,"end",null) +return new A.bR(!0,b,"end",null)}, +dO(a){return new A.bR(!0,a,null,null)}, +f(a){return A.ar(a,new Error())}, +ar(a,b){var s +if(a==null)a=new A.cC() +b.dartException=a +s=A.zE +if("defineProperty" in Object){Object.defineProperty(b,"message",{get:s}) +b.name=""}else b.toString=s +return b}, +zE(){return J.ay(this.dartException)}, +P(a,b){throw A.ar(a,b==null?new Error():b)}, +t(a,b,c){var s +if(b==null)b=0 +if(c==null)c=0 +s=Error() +A.P(A.xY(a,b,c),s)}, +xY(a,b,c){var s,r,q,p,o,n,m,l,k +if(typeof b=="string")s=b +else{r="[]=;add;removeWhere;retainWhere;removeRange;setRange;setInt8;setInt16;setInt32;setUint8;setUint16;setUint32;setFloat32;setFloat64".split(";") +q=r.length +p=b +if(p>q){c=p/q|0 +p%=q}s=r[p]}o=typeof c=="string"?c:"modify;remove from;add to".split(";")[c] +n=t.p.b(a)?"list":"ByteData" +m=a.$flags|0 +l="a " +if((m&4)!==0)k="constant " +else if((m&2)!==0){k="unmodifiable " +l="an "}else k=(m&1)!==0?"fixed-length ":"" +return new A.fX("'"+s+"': Cannot "+o+" "+l+k+n)}, +a2(a){throw A.f(A.ai(a))}, +cD(a){var s,r,q,p,o,n +a=A.uI(a.replace(String({}),"$receiver$")) +s=a.match(/\\\$[a-zA-Z]+\\\$/g) +if(s==null)s=A.i([],t.s) +r=s.indexOf("\\$arguments\\$") +q=s.indexOf("\\$argumentsExpr\\$") +p=s.indexOf("\\$expr\\$") +o=s.indexOf("\\$method\\$") +n=s.indexOf("\\$receiver\\$") +return new A.nQ(a.replace(new RegExp("\\\\\\$arguments\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$argumentsExpr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$expr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$method\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$receiver\\\\\\$","g"),"((?:x|[^x])*)"),r,q,p,o,n)}, +nR(a){return function($expr$){var $argumentsExpr$="$arguments$" +try{$expr$.$method$($argumentsExpr$)}catch(s){return s.message}}(a)}, +t3(a){return function($expr$){try{$expr$.$method$}catch(s){return s.message}}(a)}, +q5(a,b){var s=b==null,r=s?null:b.method +return new A.iX(a,r,s?null:b.receiver)}, +bP(a){var s +if(a==null)return new A.jl(a) +if(a instanceof A.fc){s=a.a +return A.db(a,s==null?A.cg(s):s)}if(typeof a!=="object")return a +if("dartException" in a)return A.db(a,a.dartException) +return A.yE(a)}, +db(a,b){if(t.fz.b(b))if(b.$thrownJsError==null)b.$thrownJsError=a +return b}, +yE(a){var s,r,q,p,o,n,m,l,k,j,i,h,g +if(!("message" in a))return a +s=a.message +if("number" in a&&typeof a.number=="number"){r=a.number +q=r&65535 +if((B.f.b5(r,16)&8191)===10)switch(q){case 438:return A.db(a,A.q5(A.k(s)+" (Error "+q+")",null)) +case 445:case 5007:A.k(s) +return A.db(a,new A.fx())}}if(a instanceof TypeError){p=$.uU() +o=$.uV() +n=$.uW() +m=$.uX() +l=$.v_() +k=$.v0() +j=$.uZ() +$.uY() +i=$.v2() +h=$.v1() +g=p.bj(s) +if(g!=null)return A.db(a,A.q5(A.q(s),g)) +else{g=o.bj(s) +if(g!=null){g.method="call" +return A.db(a,A.q5(A.q(s),g))}else if(n.bj(s)!=null||m.bj(s)!=null||l.bj(s)!=null||k.bj(s)!=null||j.bj(s)!=null||m.bj(s)!=null||i.bj(s)!=null||h.bj(s)!=null){A.q(s) +return A.db(a,new A.fx())}}return A.db(a,new A.k0(typeof s=="string"?s:""))}if(a instanceof RangeError){if(typeof s=="string"&&s.indexOf("call stack")!==-1)return new A.fQ() +s=function(b){try{return String(b)}catch(f){}return null}(a) +return A.db(a,new A.bR(!1,null,null,typeof s=="string"?s.replace(/^RangeError:\s*/,""):s))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof s=="string"&&s==="too much recursion")return new A.fQ() +return a}, +eJ(a){var s +if(a instanceof A.fc)return a.b +if(a==null)return new A.hq(a) +s=a.$cachedTrace +if(s!=null)return s +s=new A.hq(a) +if(typeof a==="object")a.$cachedTrace=s +return s}, +lB(a){if(a==null)return J.B(a) +if(typeof a=="object")return A.dy(a) +return J.B(a)}, +yL(a){if(typeof a=="number")return B.cV.gq(a) +if(a instanceof A.kX)return A.dy(a) +if(a instanceof A.bn)return a.gq(a) +if(a instanceof A.cf)return a.gq(0) +return A.lB(a)}, +us(a,b){var s,r,q,p=a.length +for(s=0;s=0 +else if(b instanceof A.cV){s=B.b.ab(a,c) +return b.b.test(s)}else return!J.lE(b,B.b.ab(a,c)).gN(0)}, +qS(a){if(a.indexOf("$",0)>=0)return a.replace(/\$/g,"$$$$") +return a}, +zB(a,b,c,d){var s=b.h6(a,d) +if(s==null)return a +return A.r2(a,s.b.index,s.gV(),c)}, +uI(a){if(/[[\]{}()*+?.\\^$|]/.test(a))return a.replace(/[[\]{}()*+?.\\^$|]/g,"\\$&") +return a}, +cO(a,b,c){var s +if(typeof b=="string")return A.zA(a,b,c) +if(b instanceof A.cV){s=b.ghh() +s.lastIndex=0 +return a.replace(s,A.qS(c))}return A.zz(a,b,c)}, +zz(a,b,c){var s,r,q,p +for(s=J.lE(b,a),s=s.gF(s),r=0,q="";s.p();){p=s.gB() +q=q+a.substring(r,p.gS())+c +r=p.gV()}s=q+a.substring(r) +return s.charCodeAt(0)==0?s:s}, +zA(a,b,c){var s,r,q +if(b===""){if(a==="")return c +s=a.length +for(r=c,q=0;q=0)return a.split(b).join(c) +return a.replace(new RegExp(A.uI(b),"g"),A.qS(c))}, +ue(a){return a}, +pV(a,b,c,d){var s,r,q,p,o,n,m +for(s=b.dB(0,a),s=new A.et(s.a,s.b,s.c),r=t.lg,q=0,p="";s.p();){o=s.d +if(o==null)o=r.a(o) +n=o.b +m=n.index +p=p+A.k(A.ue(B.b.t(a,q,m)))+A.k(c.$1(o)) +q=m+n[0].length}s=p+A.k(A.ue(B.b.ab(a,q))) +return s.charCodeAt(0)==0?s:s}, +zC(a,b,c,d){var s,r,q,p +if(typeof b=="string"){s=a.indexOf(b,d) +if(s<0)return a +return A.r2(a,s,s+b.length,c)}if(b instanceof A.cV)return d===0?a.replace(b.b,A.qS(c)):A.zB(a,b,c,d) +r=J.vh(b,a,d) +q=r.gF(r) +if(!q.p())return a +p=q.gB() +return B.b.bR(a,p.gS(),p.gV(),c)}, +r2(a,b,c,d){return a.substring(0,b)+d+a.substring(c)}, +l:function l(a,b){this.a=a +this.b=b}, +hl:function hl(a,b,c){this.a=a +this.b=b +this.c=c}, +hm:function hm(a){this.a=a}, +hn:function hn(a){this.a=a}, +ho:function ho(a){this.a=a}, +eP:function eP(a,b){this.a=a +this.$ti=b}, +dW:function dW(){}, +r:function r(a,b,c){this.a=a +this.b=b +this.$ti=c}, +he:function he(a,b){this.a=a +this.$ti=b}, +cK:function cK(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +a:function a(a,b){this.a=a +this.$ti=b}, +dX:function dX(){}, +b8:function b8(a,b,c){this.a=a +this.b=b +this.$ti=c}, +aP:function aP(a,b){this.a=a +this.$ti=b}, +iP:function iP(){}, +e0:function e0(a,b){this.a=a +this.$ti=b}, +fj:function fj(a,b,c,d,e){var _=this +_.a=a +_.c=b +_.d=c +_.e=d +_.f=e}, +nt:function nt(a,b,c){this.a=a +this.b=b +this.c=c}, +fF:function fF(){}, +nQ:function nQ(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +fx:function fx(){}, +iX:function iX(a,b,c){this.a=a +this.b=b +this.c=c}, +k0:function k0(a){this.a=a}, +jl:function jl(a){this.a=a}, +fc:function fc(a,b){this.a=a +this.b=b}, +hq:function hq(a){this.a=a +this.b=null}, +b7:function b7(){}, +i4:function i4(){}, +i5:function i5(){}, +jT:function jT(){}, +jR:function jR(){}, +dT:function dT(a,b){this.a=a +this.b=b}, +jK:function jK(a){this.a=a}, +oW:function oW(){}, +bx:function bx(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +mK:function mK(a){this.a=a}, +mM:function mM(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=null}, +aV:function aV(a,b){this.a=a +this.$ti=b}, +cv:function cv(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=null +_.$ti=d}, +fo:function fo(a,b){this.a=a +this.$ti=b}, +dr:function dr(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=null +_.$ti=d}, +dq:function dq(a,b){this.a=a +this.$ti=b}, +fn:function fn(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=null +_.$ti=d}, +dp:function dp(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +pF:function pF(a){this.a=a}, +pG:function pG(a){this.a=a}, +pH:function pH(a){this.a=a}, +bn:function bn(){}, +ez:function ez(){}, +eA:function eA(){}, +d7:function d7(){}, +cV:function cV(a,b){var _=this +_.a=a +_.b=b +_.e=_.d=_.c=null}, +hg:function hg(a){this.b=a}, +kw:function kw(a,b,c){this.a=a +this.b=b +this.c=c}, +et:function et(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +fS:function fS(a,b){this.a=a +this.c=b}, +kU:function kU(a,b,c){this.a=a +this.b=b +this.c=c}, +kV:function kV(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +zD(a){throw A.ar(A.rA(a),new Error())}, +o(){throw A.ar(A.q6(""),new Error())}, +c6(){throw A.ar(A.w0(""),new Error())}, +dc(){throw A.ar(A.rA(""),new Error())}, +tr(){var s=new A.kB("") +return s.b=s}, +oC(a){var s=new A.kB(a) +return s.b=s}, +kB:function kB(a){this.a=a +this.b=null}, +pb(a,b,c){}, +hC(a){var s,r,q +if(t.iy.b(a))return a +s=J.ad(a) +r=A.aE(s.gn(a),null,!1,t.z) +for(q=0;q>>0!==a||a>=c)throw A.f(A.lz(b,a))}, +tY(a,b,c){var s +if(!(a>>>0!==a))if(b==null)s=a>c +else s=b>>>0!==b||a>b||b>c +else s=!0 +if(s)throw A.f(A.yZ(a,b,c)) +if(b==null)return c +return b}, +dv:function dv(){}, +fu:function fu(){}, +p0:function p0(a){this.a=a}, +j7:function j7(){}, +aW:function aW(){}, +ft:function ft(){}, +by:function by(){}, +j8:function j8(){}, +j9:function j9(){}, +ja:function ja(){}, +jb:function jb(){}, +jc:function jc(){}, +jd:function jd(){}, +fv:function fv(){}, +fw:function fw(){}, +dw:function dw(){}, +hh:function hh(){}, +hi:function hi(){}, +hj:function hj(){}, +hk:function hk(){}, +qi(a,b){var s=b.c +return s==null?b.c=A.hs(a,"cr",[b.x]):s}, +rV(a){var s=a.w +if(s===6||s===7)return A.rV(a.x) +return s===11||s===12}, +wK(a){return a.as}, +r_(a,b){var s,r=b.length +for(s=0;s=p)return A.c(q,0) +s=A.hu(v.typeUniverse,A.qP(q[0]),"@<0>") +for(r=1;r=0)p+=" "+r[q];++q}return p+"})"}, +u3(a3,a4,a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1=", ",a2=null +if(a5!=null){s=a5.length +if(a4==null)a4=A.i([],t.s) +else a2=a4.length +r=a4.length +for(q=s;q>0;--q)B.a.l(a4,"T"+(r+q)) +for(p=t.X,o="<",n="",q=0;q=0))return A.c(a4,l) +o=o+n+a4[l] +k=a5[q] +j=k.w +if(!(j===2||j===3||j===4||j===5||k===p))o+=" extends "+A.be(k,a4)}o+=">"}else o="" +p=a3.x +i=a3.y +h=i.a +g=h.length +f=i.b +e=f.length +d=i.c +c=d.length +b=A.be(p,a4) +for(a="",a0="",q=0;q0){a+=a0+"[" +for(a0="",q=0;q0){a+=a0+"{" +for(a0="",q=0;q "+b}, +be(a,b){var s,r,q,p,o,n,m,l=a.w +if(l===5)return"erased" +if(l===2)return"dynamic" +if(l===3)return"void" +if(l===1)return"Never" +if(l===4)return"any" +if(l===6){s=a.x +r=A.be(s,b) +q=s.w +return(q===11||q===12?"("+r+")":r)+"?"}if(l===7)return"FutureOr<"+A.be(a.x,b)+">" +if(l===8){p=A.yD(a.x) +o=a.y +return o.length>0?p+("<"+A.ua(o,b)+">"):p}if(l===10)return A.yq(a,b) +if(l===11)return A.u3(a,b,null) +if(l===12)return A.u3(a.x,b,a.y) +if(l===13){n=a.x +m=b.length +n=m-1-n +if(!(n>=0&&n0)p+="<"+A.hr(c)+">" +s=a.eC.get(p) +if(s!=null)return s +r=new A.bU(null,null) +r.w=8 +r.x=b +r.y=c +if(c.length>0)r.c=c[0] +r.as=p +q=A.d8(a,r) +a.eC.set(p,q) +return q}, +qD(a,b,c){var s,r,q,p,o,n +if(b.w===9){s=b.x +r=b.y.concat(c)}else{r=c +s=b}q=s.as+(";<"+A.hr(r)+">") +p=a.eC.get(q) +if(p!=null)return p +o=new A.bU(null,null) +o.w=9 +o.x=s +o.y=r +o.as=q +n=A.d8(a,o) +a.eC.set(q,n) +return n}, +tF(a,b,c){var s,r,q="+"+(b+"("+A.hr(c)+")"),p=a.eC.get(q) +if(p!=null)return p +s=new A.bU(null,null) +s.w=10 +s.x=b +s.y=c +s.as=q +r=A.d8(a,s) +a.eC.set(q,r) +return r}, +tC(a,b,c){var s,r,q,p,o,n=b.as,m=c.a,l=m.length,k=c.b,j=k.length,i=c.c,h=i.length,g="("+A.hr(m) +if(j>0){s=l>0?",":"" +g+=s+"["+A.hr(k)+"]"}if(h>0){s=l>0?",":"" +g+=s+"{"+A.xs(i)+"}"}r=n+(g+")") +q=a.eC.get(r) +if(q!=null)return q +p=new A.bU(null,null) +p.w=11 +p.x=b +p.y=c +p.as=r +o=A.d8(a,p) +a.eC.set(r,o) +return o}, +qE(a,b,c,d){var s,r=b.as+("<"+A.hr(c)+">"),q=a.eC.get(r) +if(q!=null)return q +s=A.xu(a,b,c,r,d) +a.eC.set(r,s) +return s}, +xu(a,b,c,d,e){var s,r,q,p,o,n,m,l +if(e){s=c.length +r=A.p4(s) +for(q=0,p=0;p0){n=A.da(a,b,r,0) +m=A.eG(a,c,r,0) +return A.qE(a,n,m,c!==m)}}l=new A.bU(null,null) +l.w=12 +l.x=b +l.y=c +l.as=d +return A.d8(a,l)}, +tx(a,b,c,d){return{u:a,e:b,r:c,s:[],p:0,n:d}}, +tz(a){var s,r,q,p,o,n,m,l=a.r,k=a.s +for(s=l.length,r=0;r=48&&q<=57)r=A.xk(r+1,q,l,k) +else if((((q|32)>>>0)-97&65535)<26||q===95||q===36||q===124)r=A.ty(a,r,l,k,!1) +else if(q===46)r=A.ty(a,r,l,k,!0) +else{++r +switch(q){case 44:break +case 58:k.push(!1) +break +case 33:k.push(!0) +break +case 59:k.push(A.dM(a.u,a.e,k.pop())) +break +case 94:k.push(A.xw(a.u,k.pop())) +break +case 35:k.push(A.ht(a.u,5,"#")) +break +case 64:k.push(A.ht(a.u,2,"@")) +break +case 126:k.push(A.ht(a.u,3,"~")) +break +case 60:k.push(a.p) +a.p=k.length +break +case 62:A.xm(a,k) +break +case 38:A.xl(a,k) +break +case 63:p=a.u +k.push(A.tE(p,A.dM(p,a.e,k.pop()),a.n)) +break +case 47:p=a.u +k.push(A.tD(p,A.dM(p,a.e,k.pop()),a.n)) +break +case 40:k.push(-3) +k.push(a.p) +a.p=k.length +break +case 41:A.xj(a,k) +break +case 91:k.push(a.p) +a.p=k.length +break +case 93:o=k.splice(a.p) +A.tA(a.u,a.e,o) +a.p=k.pop() +k.push(o) +k.push(-1) +break +case 123:k.push(a.p) +a.p=k.length +break +case 125:o=k.splice(a.p) +A.xo(a.u,a.e,o) +a.p=k.pop() +k.push(o) +k.push(-2) +break +case 43:n=l.indexOf("(",r) +k.push(l.substring(r,n)) +k.push(-4) +k.push(a.p) +a.p=k.length +r=n+1 +break +default:throw"Bad character "+q}}}m=k.pop() +return A.dM(a.u,a.e,m)}, +xk(a,b,c,d){var s,r,q=b-48 +for(s=c.length;a=48&&r<=57))break +q=q*10+(r-48)}d.push(q) +return a}, +ty(a,b,c,d,e){var s,r,q,p,o,n,m=b+1 +for(s=c.length;m>>0)-97&65535)<26||r===95||r===36||r===124))q=r>=48&&r<=57 +else q=!0 +if(!q)break}}p=c.substring(b,m) +if(e){s=a.u +o=a.e +if(o.w===9)o=o.x +n=A.xA(s,o.x)[p] +if(n==null)A.P('No "'+p+'" in "'+A.wK(o)+'"') +d.push(A.hu(s,o,n))}else d.push(p) +return m}, +xm(a,b){var s,r=a.u,q=A.tw(a,b),p=b.pop() +if(typeof p=="string")b.push(A.hs(r,p,q)) +else{s=A.dM(r,a.e,p) +switch(s.w){case 11:b.push(A.qE(r,s,q,a.n)) +break +default:b.push(A.qD(r,s,q)) +break}}}, +xj(a,b){var s,r,q,p=a.u,o=b.pop(),n=null,m=null +if(typeof o=="number")switch(o){case-1:n=b.pop() +break +case-2:m=b.pop() +break +default:b.push(o) +break}else b.push(o) +s=A.tw(a,b) +o=b.pop() +switch(o){case-3:o=b.pop() +if(n==null)n=p.sEA +if(m==null)m=p.sEA +r=A.dM(p,a.e,o) +q=new A.kO() +q.a=s +q.b=n +q.c=m +b.push(A.tC(p,r,q)) +return +case-4:b.push(A.tF(p,b.pop(),s)) +return +default:throw A.f(A.hV("Unexpected state under `()`: "+A.k(o)))}}, +xl(a,b){var s=b.pop() +if(0===s){b.push(A.ht(a.u,1,"0&")) +return}if(1===s){b.push(A.ht(a.u,4,"1&")) +return}throw A.f(A.hV("Unexpected extended operation "+A.k(s)))}, +tw(a,b){var s=b.splice(a.p) +A.tA(a.u,a.e,s) +a.p=b.pop() +return s}, +dM(a,b,c){if(typeof c=="string")return A.hs(a,c,a.sEA) +else if(typeof c=="number"){b.toString +return A.xn(a,b,c)}else return c}, +tA(a,b,c){var s,r=c.length +for(s=0;sn)return!1 +m=n-o +l=s.b +k=r.b +j=l.length +i=k.length +if(o+j=d)return!1 +a1=f[b] +b+=3 +if(a00?new Array(q):v.typeUniverse.sEA +for(o=0;o0?new Array(a):v.typeUniverse.sEA}, +bU:function bU(a,b){var _=this +_.a=a +_.b=b +_.r=_.f=_.d=_.c=null +_.w=0 +_.as=_.Q=_.z=_.y=_.x=null}, +kO:function kO(){this.c=this.b=this.a=null}, +kX:function kX(a){this.a=a}, +kL:function kL(){}, +eB:function eB(a){this.a=a}, +x3(){var s,r,q +if(self.scheduleImmediate!=null)return A.yF() +if(self.MutationObserver!=null&&self.document!=null){s={} +r=self.document.createElement("div") +q=self.document.createElement("span") +s.a=null +new self.MutationObserver(A.eI(new A.ov(s),1)).observe(r,{childList:true}) +return new A.ou(s,r,q)}else if(self.setImmediate!=null)return A.yG() +return A.yH()}, +x4(a){self.scheduleImmediate(A.eI(new A.ow(t.U.a(a)),0))}, +x5(a){self.setImmediate(A.eI(new A.ox(t.U.a(a)),0))}, +x6(a){t.U.a(a) +A.xq(0,a)}, +xq(a,b){var s=new A.oY() +s.jX(a,b) +return s}, +br(a){return new A.kx(new A.aB($.an,a.h("aB<0>")),a.h("kx<0>"))}, +bq(a,b){a.$2(0,null) +b.b=!0 +return b.a}, +c3(a,b){A.xQ(a,b)}, +bp(a,b){b.eF(a)}, +bo(a,b){b.eG(A.bP(a),A.eJ(a))}, +xQ(a,b){var s,r,q=new A.p9(b),p=new A.pa(b) +if(a instanceof A.aB)a.hv(q,p,t.z) +else{s=t.z +if(a instanceof A.aB)a.fe(q,p,s) +else{r=new A.aB($.an,t.j_) +r.a=8 +r.c=a +r.hv(q,p,s)}}}, +bs(a){var s=function(b,c){return function(d,e){while(true){try{b(d,e) +break}catch(r){e=r +d=c}}}}(a,1) +return $.an.it(new A.ph(s),t.H,t.S,t.z)}, +q0(a){var s +if(t.fz.b(a)){s=a.gcf() +if(s!=null)return s}return B.aV}, +y8(a,b){if($.an===B.a3)return null +return null}, +y9(a,b){if($.an!==B.a3)A.y8(a,b) +if(b==null)if(t.fz.b(a)){b=a.gcf() +if(b==null){A.rR(a,B.aV) +b=B.aV}}else b=B.aV +else if(t.fz.b(a))A.rR(a,b) +return new A.bG(a,b)}, +qz(a,b,c){var s,r,q,p,o={},n=o.a=a +for(s=t.j_;r=n.a,(r&4)!==0;n=a){a=s.a(n.c) +o.a=a}if(n===b){s=A.wO() +b.e9(new A.bG(new A.bR(!0,n,null,"Cannot complete a future with itself"),s)) +return}q=b.a&1 +s=n.a=r|q +if((s&24)===0){p=t.np.a(b.c) +b.a=b.a&1|4 +b.c=n +n.hm(p) +return}if(!c)if(b.c==null)n=(s&16)===0||q!==0 +else n=!1 +else n=!0 +if(n){p=b.dq() +b.dg(o.a) +A.ex(b,p) +return}b.a^=2 +A.ly(null,null,b.b,t.U.a(new A.oI(o,b)))}, +ex(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d={},c=d.a=a +for(s=t.B,r=t.np;;){q={} +p=c.a +o=(p&16)===0 +n=!o +if(b==null){if(n&&(p&1)===0){m=s.a(c.c) +A.qO(m.a,m.b)}return}q.a=b +l=b.a +for(c=b;l!=null;c=l,l=k){c.a=null +A.ex(d.a,c) +q.a=l +k=l.a}p=d.a +j=p.c +q.b=n +q.c=j +if(o){i=c.c +i=(i&1)!==0||(i&15)===8}else i=!0 +if(i){h=c.b.b +if(n){p=p.b===h +p=!(p||p)}else p=!1 +if(p){s.a(j) +A.qO(j.a,j.b) +return}g=$.an +if(g!==h)$.an=h +else g=null +c=c.c +if((c&15)===8)new A.oM(q,d,n).$0() +else if(o){if((c&1)!==0)new A.oL(q,j).$0()}else if((c&2)!==0)new A.oK(d,q).$0() +if(g!=null)$.an=g +c=q.c +if(c instanceof A.aB){p=q.a.$ti +p=p.h("cr<2>").b(c)||!p.y[1].b(c)}else p=!1 +if(p){f=q.a.b +if((c.a&24)!==0){e=r.a(f.c) +f.c=null +b=f.dr(e) +f.a=c.a&30|f.a&1 +f.c=c.c +d.a=c +continue}else A.qz(c,f,!0) +return}}f=q.a.b +e=r.a(f.c) +f.c=null +b=f.dr(e) +c=q.b +p=q.c +if(!c){f.$ti.c.a(p) +f.a=8 +f.c=p}else{s.a(p) +f.a=f.a&1|16 +f.c=p}d.a=f +c=f}}, +yr(a,b){var s +if(t.ng.b(a))return b.it(a,t.z,t.K,t.F) +s=t.mq +if(s.b(a))return s.a(a) +throw A.f(A.q_(a,"onError",u.w))}, +yp(){var s,r +for(s=$.eF;s!=null;s=$.eF){$.hE=null +r=s.b +$.eF=r +if(r==null)$.hD=null +s.a.$0()}}, +yy(){$.qM=!0 +try{A.yp()}finally{$.hE=null +$.qM=!1 +if($.eF!=null)$.r5().$1(A.uh())}}, +uc(a){var s=new A.ky(a),r=$.hD +if(r==null){$.eF=$.hD=s +if(!$.qM)$.r5().$1(A.uh())}else $.hD=r.b=s}, +yu(a){var s,r,q,p=$.eF +if(p==null){A.uc(a) +$.hE=$.hD +return}s=new A.ky(a) +r=$.hE +if(r==null){s.b=p +$.eF=$.hE=s}else{q=r.b +s.b=q +$.hE=r.b=s +if(q==null)$.hD=s}}, +zQ(a,b){A.dP(a,"stream",t.K) +return new A.kT(b.h("kT<0>"))}, +qO(a,b){A.yu(new A.pf(a,b))}, +u9(a,b,c,d,e){var s,r=$.an +if(r===c)return d.$0() +$.an=c +s=r +try{r=d.$0() +return r}finally{$.an=s}}, +yt(a,b,c,d,e,f,g){var s,r=$.an +if(r===c)return d.$1(e) +$.an=c +s=r +try{r=d.$1(e) +return r}finally{$.an=s}}, +ys(a,b,c,d,e,f,g,h,i){var s,r=$.an +if(r===c)return d.$2(e,f) +$.an=c +s=r +try{r=d.$2(e,f) +return r}finally{$.an=s}}, +ly(a,b,c,d){t.U.a(d) +if(B.a3!==c){d=c.lO(d) +d=d}A.uc(d)}, +ov:function ov(a){this.a=a}, +ou:function ou(a,b,c){this.a=a +this.b=b +this.c=c}, +ow:function ow(a){this.a=a}, +ox:function ox(a){this.a=a}, +oY:function oY(){}, +oZ:function oZ(a,b){this.a=a +this.b=b}, +kx:function kx(a,b){this.a=a +this.b=!1 +this.$ti=b}, +p9:function p9(a){this.a=a}, +pa:function pa(a){this.a=a}, +ph:function ph(a){this.a=a}, +bG:function bG(a,b){this.a=a +this.b=b}, +kC:function kC(){}, +h8:function h8(a,b){this.a=a +this.$ti=b}, +dJ:function dJ(a,b,c,d,e){var _=this +_.a=null +_.b=a +_.c=b +_.d=c +_.e=d +_.$ti=e}, +aB:function aB(a,b){var _=this +_.a=0 +_.b=a +_.c=null +_.$ti=b}, +oF:function oF(a,b){this.a=a +this.b=b}, +oJ:function oJ(a,b){this.a=a +this.b=b}, +oI:function oI(a,b){this.a=a +this.b=b}, +oH:function oH(a,b){this.a=a +this.b=b}, +oG:function oG(a,b){this.a=a +this.b=b}, +oM:function oM(a,b,c){this.a=a +this.b=b +this.c=c}, +oN:function oN(a,b){this.a=a +this.b=b}, +oO:function oO(a){this.a=a}, +oL:function oL(a,b){this.a=a +this.b=b}, +oK:function oK(a,b){this.a=a +this.b=b}, +ky:function ky(a){this.a=a +this.b=null}, +kT:function kT(a){this.$ti=a}, +hz:function hz(){}, +kS:function kS(){}, +oX:function oX(a,b){this.a=a +this.b=b}, +pf:function pf(a,b){this.a=a +this.b=b}, +rr(a,b,c,d,e){if(c==null)if(b==null){if(a==null)return new A.cJ(d.h("@<0>").u(e).h("cJ<1,2>")) +b=A.ul()}else{if(A.yU()===b&&A.yT()===a)return new A.dK(d.h("@<0>").u(e).h("dK<1,2>")) +if(a==null)a=A.uk()}else{if(b==null)b=A.ul() +if(a==null)a=A.uk()}return A.xc(a,b,c,d,e)}, +tt(a,b){var s=a[b] +return s===a?null:s}, +qB(a,b,c){if(c==null)a[b]=a +else a[b]=c}, +qA(){var s=Object.create(null) +A.qB(s,"",s) +delete s[""] +return s}, +xc(a,b,c,d,e){var s=c!=null?c:new A.oD(d) +return new A.ha(a,b,s,d.h("@<0>").u(e).h("ha<1,2>"))}, +ae(a,b){return new A.bx(a.h("@<0>").u(b).h("bx<1,2>"))}, +v(a,b,c){return b.h("@<0>").u(c).h("mL<1,2>").a(A.us(a,new A.bx(b.h("@<0>").u(c).h("bx<1,2>"))))}, +az(a,b){return new A.bx(a.h("@<0>").u(b).h("bx<1,2>"))}, +w2(a){return new A.cL(a.h("cL<0>"))}, +j3(a){return new A.cL(a.h("cL<0>"))}, +w3(a,b){return b.h("rB<0>").a(A.z5(a,new A.cL(b.h("cL<0>"))))}, +qC(){var s=Object.create(null) +s[""]=s +delete s[""] +return s}, +tv(a,b,c){var s=new A.dL(a,b,c.h("dL<0>")) +s.c=a.e +return s}, +xV(a,b){return J.N(a,b)}, +xW(a){return J.B(a)}, +vV(a,b){var s,r=a.$ti,q=new A.du(J.at(a.a),a.b,r.h("du<1,2>")) +if(q.p()){s=q.a +return s==null?r.y[1].a(s):s}return null}, +j2(a,b,c){var s=A.ae(b,c) +a.T(0,new A.mN(s,b,c)) +return s}, +w1(a,b,c){var s=A.ae(b,c) +s.a1(0,a) +return s}, +w4(a,b){var s=t.bP +return J.r8(s.a(a),s.a(b))}, +q9(a){var s,r +if(A.qX(a))return"{...}" +s=new A.Y("") +try{r={} +B.a.l($.bF,a) +s.a+="{" +r.a=!0 +a.T(0,new A.mO(r,s)) +s.a+="}"}finally{if(0>=$.bF.length)return A.c($.bF,-1) +$.bF.pop()}r=s.a +return r.charCodeAt(0)==0?r:r}, +q7(a){return new A.fp(A.aE(A.w5(null),null,!1,a.h("0?")),a.h("fp<0>"))}, +w5(a){return 8}, +cJ:function cJ(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +dK:function dK(a){var _=this +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=a}, +ha:function ha(a,b,c,d){var _=this +_.f=a +_.r=b +_.w=c +_.a=0 +_.e=_.d=_.c=_.b=null +_.$ti=d}, +oD:function oD(a){this.a=a}, +hc:function hc(a,b){this.a=a +this.$ti=b}, +hd:function hd(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +cL:function cL(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +kP:function kP(a){this.a=a +this.b=null}, +dL:function dL(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.$ti=c}, +cE:function cE(a,b){this.a=a +this.$ti=b}, +mN:function mN(a,b,c){this.a=a +this.b=b +this.c=c}, +C:function C(){}, +a9:function a9(){}, +mO:function mO(a,b){this.a=a +this.b=b}, +hv:function hv(){}, +ea:function ea(){}, +dG:function dG(a,b){this.a=a +this.$ti=b}, +fp:function fp(a,b){var _=this +_.a=a +_.d=_.c=_.b=0 +_.$ti=b}, +hf:function hf(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=null +_.$ti=e}, +aY:function aY(){}, +hp:function hp(){}, +eC:function eC(){}, +xJ(a,b,c){var s,r,q,p,o=c-b +if(o<=4096)s=$.v9() +else s=new Uint8Array(o) +for(r=J.ad(a),q=0;q>>2,h=3-(a0&3) +for(s=J.ad(b),r=a.length,q=f.$flags|0,p=c,o=0;p>>0 +i=(i<<8|n)&16777215;--h +if(h===0){m=g+1 +l=i>>>18&63 +if(!(l>>12&63 +if(!(l>>6&63 +if(!(l=0&&o<=255){if(h<3){m=g+1 +j=m+1 +if(3-h===1){s=i>>>2&63 +if(!(s>>10&63 +if(!(s>>4&63 +if(!(s>>0}for(p=c;p255)break;++p}throw A.f(A.q_(b,"Not a byte value at index "+p+": 0x"+B.f.d6(s.m(b,p),16),null))}, +rz(a,b,c){return new A.fl(a,b)}, +xX(a){return a.oD()}, +xh(a,b){return new A.oR(a,[],A.yR())}, +xi(a,b,c){var s,r=new A.Y(""),q=A.xh(r,b) +q.dY(a) +s=r.a +return s.charCodeAt(0)==0?s:s}, +xK(a){switch(a){case 65:return"Missing extension byte" +case 67:return"Unexpected extension byte" +case 69:return"Invalid UTF-8 byte" +case 71:return"Overlong encoding" +case 73:return"Out of unicode range" +case 75:return"Encoded surrogate" +case 77:return"Unfinished UTF-8 octet sequence" +default:return""}}, +p3:function p3(){}, +p2:function p2(){}, +hS:function hS(){}, +kY:function kY(){}, +hT:function hT(a,b){this.a=a +this.b=b}, +eL:function eL(){}, +hX:function hX(){}, +oy:function oy(a){this.a=0 +this.b=a}, +bt:function bt(){}, +cl:function cl(){}, +ic:function ic(){}, +fl:function fl(a,b){this.a=a +this.b=b}, +iZ:function iZ(a,b){this.a=a +this.b=b}, +iY:function iY(){}, +j_:function j_(a){this.b=a}, +oS:function oS(){}, +oT:function oT(a,b){this.a=a +this.b=b}, +oR:function oR(a,b,c){this.c=a +this.a=b +this.b=c}, +k4:function k4(){}, +k5:function k5(a){this.a=a}, +kZ:function kZ(a){this.a=a +this.b=16 +this.c=0}, +b1(a,b){var s,r=b.length +for(;;){if(a>0){s=a-1 +if(!(s=0&&q>>0)+(s[6]>>>4)-1075 +o=new Uint16Array(4) +o[0]=(s[1]<<8>>>0)+s[0] +o[1]=(s[3]<<8>>>0)+s[2] +o[2]=(s[5]<<8>>>0)+s[4] +o[3]=s[6]&15|16 +n=new A.aq(!1,o,4) +if(p<0)m=n.e5(0,-p) +else m=p>0?n.aW(0,p):n +return m}, +qw(a,b,c,d){var s,r,q,p,o +if(b===0)return 0 +if(c===0&&d===a)return b +for(s=b-1,r=a.length,q=d.$flags|0;s>=0;--s){p=s+c +if(!(s=0&&p=0;--s){q&2&&A.t(d) +if(!(s=0;--s){if(!(s=0&&n>>0 +p=B.f.aW(o&i,k)}q&2&&A.t(d) +if(!(l>=0&&l=0;){r&2&&A.t(d) +if(!(q=0&&r=0&&m>>0 +s=B.f.cI(n,l)}q&2&&A.t(d) +if(!(r>=0&&r=0;--s){if(!(s>>16}for(o=d;o=0&&o>>16}q&2&&A.t(e) +if(!(b>=0&&b=0&&o=0;e=l,c=o){o=c+1 +if(!(c=0&&e=0&&e=0&&c=0&&r>>0,a) +if(q>65535)return 65535 +return q}, +zb(a){return A.lB(a)}, +lA(a,b){var s=A.jD(a,b) +if(s!=null)return s +throw A.f(A.aD(a,null,null))}, +z_(a){var s=A.qf(a) +if(s!=null)return s +throw A.f(A.aD("Invalid double",a,null))}, +vK(a,b){a=A.ar(a,new Error()) +if(a==null)a=A.cg(a) +a.stack=b.j(0) +throw a}, +aE(a,b,c,d){var s,r=c?J.vX(a,d):J.q2(a,d) +if(a!==0&&b!=null)for(s=0;s")) +for(s=J.at(a);s.p();)B.a.l(r,c.a(s.gB())) +if(b)return r +r.$flags=1 +return r}, +a7(a,b){var s,r +if(Array.isArray(a))return A.i(a.slice(0),b.h("y<0>")) +s=A.i([],b.h("y<0>")) +for(r=J.at(a);r.p();)B.a.l(s,r.gB()) +return s}, +rC(a,b){var s=A.q8(a,!1,b) +s.$flags=3 +return s}, +aA(a,b,c){var s,r,q,p,o +A.aF(b,"start") +s=c==null +r=!s +if(r){q=c-b +if(q<0)throw A.f(A.af(c,b,null,"end",null)) +if(q===0)return""}if(Array.isArray(a)){p=a +o=p.length +if(s)c=o +return A.rQ(b>0||c0)a=J.lF(a,b) +s=A.a7(a,t.S) +return A.rQ(s)}, +wQ(a,b,c){var s=a.length +if(b>=s)return"" +return A.wG(a,b,c==null||c>s?s:c)}, +a5(a,b){return new A.cV(a,A.q3(a,!1,b,!1,!1,""))}, +za(a,b){return a==null?b==null:a===b}, +qj(a,b,c){var s=J.at(b) +if(!s.p())return a +if(c.length===0){do a+=A.k(s.gB()) +while(s.p())}else{a+=A.k(s.gB()) +while(s.p())a=a+c+A.k(s.gB())}return a}, +n6(a,b){return new A.jh(a,b.gnt(),b.gnJ(),b.gnz())}, +qp(){var s,r,q=A.ww() +if(q==null)throw A.f(A.ac("'Uri.base' is not supported")) +s=$.t7 +if(s!=null&&q===$.t6)return s +r=A.nT(q,0,null) +$.t7=r +$.t6=q +return r}, +wO(){return A.eJ(new Error())}, +vH(a){var s=Math.abs(a),r=a<0?"-":"" +if(s>=1000)return""+a +if(s>=100)return r+"0"+s +if(s>=10)return r+"00"+s +return r+"000"+s}, +rn(a){if(a>=100)return""+a +if(a>=10)return"0"+a +return"00"+a}, +i8(a){if(a>=10)return""+a +return"0"+a}, +dm(a){if(typeof a=="number"||A.qL(a)||a==null)return J.ay(a) +if(typeof a=="string")return JSON.stringify(a) +return A.rP(a)}, +vL(a,b){A.dP(a,"error",t.K) +A.dP(b,"stackTrace",t.F) +A.vK(a,b)}, +hV(a){return new A.hU(a)}, +W(a,b){return new A.bR(!1,null,b,a)}, +q_(a,b,c){return new A.bR(!0,a,b,c)}, +hR(a,b,c){return a}, +aQ(a){var s=null +return new A.ef(s,s,!1,s,s,a)}, +nu(a,b){return new A.ef(null,null,!0,a,b,"Value not in range")}, +af(a,b,c,d,e){return new A.ef(b,c,!0,a,d,"Invalid value")}, +rS(a,b,c,d){if(ac)throw A.f(A.af(a,b,c,d,null)) +return a}, +cw(a,b,c){if(0>a||a>c)throw A.f(A.af(a,0,c,"start",null)) +if(b!=null){if(a>b||b>c)throw A.f(A.af(b,a,c,"end",null)) +return b}return c}, +aF(a,b){if(a<0)throw A.f(A.af(a,0,null,b,null)) +return a}, +vR(a,b,c,d,e){var s=e==null?b.gn(b):e +return new A.fh(s,!0,a,c,"Index out of range")}, +iM(a,b,c,d,e){return new A.fh(b,!0,a,e,"Index out of range")}, +vS(a,b,c,d,e){if(0>a||a>=b)throw A.f(A.iM(a,b,c,d,"index")) +return a}, +ac(a){return new A.fX(a)}, +k_(a){return new A.fW(a)}, +ce(a){return new A.dD(a)}, +ai(a){return new A.i7(a)}, +S(a){return new A.kM(a)}, +aD(a,b,c){return new A.aC(a,b,c)}, +vW(a,b,c){var s,r +if(A.qX(a)){if(b==="("&&c===")")return"(...)" +return b+"..."+c}s=A.i([],t.s) +B.a.l($.bF,a) +try{A.yn(a,s)}finally{if(0>=$.bF.length)return A.c($.bF,-1) +$.bF.pop()}r=A.qj(b,t.e7.a(s),", ")+c +return r.charCodeAt(0)==0?r:r}, +iT(a,b,c){var s,r +if(A.qX(a))return b+"..."+c +s=new A.Y(b) +B.a.l($.bF,a) +try{r=s +r.a=A.qj(r.a,a,", ")}finally{if(0>=$.bF.length)return A.c($.bF,-1) +$.bF.pop()}s.a+=c +r=s.a +return r.charCodeAt(0)==0?r:r}, +yn(a,b){var s,r,q,p,o,n,m,l=a.gF(a),k=0,j=0 +for(;;){if(!(k<80||j<3))break +if(!l.p())return +s=A.k(l.gB()) +B.a.l(b,s) +k+=s.length+2;++j}if(!l.p()){if(j<=5)return +if(0>=b.length)return A.c(b,-1) +r=b.pop() +if(0>=b.length)return A.c(b,-1) +q=b.pop()}else{p=l.gB();++j +if(!l.p()){if(j<=4){B.a.l(b,A.k(p)) +return}r=A.k(p) +if(0>=b.length)return A.c(b,-1) +q=b.pop() +k+=r.length+2}else{o=l.gB();++j +for(;l.p();p=o,o=n){n=l.gB();++j +if(j>100){for(;;){if(!(k>75&&j>3))break +if(0>=b.length)return A.c(b,-1) +k-=b.pop().length+2;--j}B.a.l(b,"...") +return}}q=A.k(p) +r=A.k(o) +k+=r.length+q.length+4}}if(j>b.length+2){k+=5 +m="..."}else m=null +for(;;){if(!(k>80&&b.length>3))break +if(0>=b.length)return A.c(b,-1) +k-=b.pop().length+2 +if(m==null){k+=5 +m="..."}}if(m!=null)B.a.l(b,m) +B.a.l(b,q) +B.a.l(b,r)}, +rD(a,b,c,d,e){return new A.df(a,b.h("@<0>").u(c).u(d).u(e).h("df<1,2,3,4>"))}, +aX(a,b,c,d){var s +if(B.u===c){s=J.B(a) +b=J.B(b) +return A.nN(A.cz(A.cz($.lD(),s),b))}if(B.u===d){s=J.B(a) +b=J.B(b) +c=J.B(c) +return A.nN(A.cz(A.cz(A.cz($.lD(),s),b),c))}s=J.B(a) +b=J.B(b) +c=J.B(c) +d=J.B(d) +d=A.nN(A.cz(A.cz(A.cz(A.cz($.lD(),s),b),c),d)) +return d}, +wk(a){var s,r,q=$.lD() +for(s=a.length,r=0;r=s){r=a7+4 +if(!(r>>0 +if(n===0)return A.t5(a7>0||a8=14)B.a.k(m,7,a8) +l=m[1] +if(l>=a7)if(A.ub(a6,a7,l,20,m)===20)m[7]=l +k=m[2]+1 +j=m[3] +i=m[4] +h=m[5] +g=m[6] +if(gl+3)){r=j>a7 +d=0 +if(!(r&&j+1===i)){if(!B.b.aa(a6,"\\",i))if(k>a7)q=B.b.aa(a6,"\\",k-1)||B.b.aa(a6,"\\",k-2) +else q=!1 +else q=!0 +if(!q){if(!(hi+2&&B.b.aa(a6,"/..",h-3) +else q=!0 +if(!q)if(l===a7+4){if(B.b.aa(a6,"file",a7)){if(k<=a7){if(!B.b.aa(a6,"/",i)){c="file:///" +n=3}else{c="file://" +n=2}a6=c+B.b.t(a6,i,a8) +l-=a7 +s=n-a7 +h+=s +g+=s +a8=a6.length +a7=d +k=7 +j=7 +i=7}else if(i===h){s=a7===0 +s +if(s){a6=B.b.bR(a6,i,h,"/");++h;++g;++a8}else{a6=B.b.t(a6,a7,i)+"/"+B.b.t(a6,h,a8) +l-=a7 +k-=a7 +j-=a7 +i-=a7 +s=1-a7 +h+=s +g+=s +a8=a6.length +a7=d}}e="file"}else if(B.b.aa(a6,"http",a7)){if(r&&j+3===i&&B.b.aa(a6,"80",j+1)){s=a7===0 +s +if(s){a6=B.b.bR(a6,j,i,"") +i-=3 +h-=3 +g-=3 +a8-=3}else{a6=B.b.t(a6,a7,j)+B.b.t(a6,i,a8) +l-=a7 +k-=a7 +j-=a7 +s=3+a7 +i-=s +h-=s +g-=s +a8=a6.length +a7=d}}e="http"}}else if(l===s&&B.b.aa(a6,"https",a7)){if(r&&j+4===i&&B.b.aa(a6,"443",j+1)){s=a7===0 +s +if(s){a6=B.b.bR(a6,j,i,"") +i-=4 +h-=4 +g-=4 +a8-=3}else{a6=B.b.t(a6,a7,j)+B.b.t(a6,i,a8) +l-=a7 +k-=a7 +j-=a7 +s=4+a7 +i-=s +h-=s +g-=s +a8=a6.length +a7=d}}e="https"}f=!q}}}}if(f){if(a7>0||a8a7)e=A.qG(a6,a7,l) +else{if(l===a7)A.eD(a6,a7,"Invalid empty scheme") +e=""}b=a5 +if(k>a7){a=l+3 +a0=a=c)n=0 +else{if(!(q>=0&&q=0&&b=0&&r=97&&o<=102)continue +if(p===46){if(q-1===b)return new A.aC(n,a,q) +r=q +break}return new A.aC("Unexpected character",a,q-1)}if(r-1===b)return new A.aC(n,a,r) +return new A.aC("Missing '.' in IPvFuture address",a,r)}if(r===c)return new A.aC("Missing address in IPvFuture address, host, cursor",null,null) +for(;;){if(!(r>=0&&r=0&&a4=a5)j=0 +else{if(!(n=97&&f<=102)g=f-87 +else break A +k=h}if(nm){if(j===46){if(k){if(p<=6){A.wU(a3,m,a5,s,p*2) +p+=2 +n=a5 +break}a2.$2(a1,m)}break}o=p*2 +e=B.f.b5(l,8) +if(!(o<16))return A.c(s,o) +s[o]=e;++o +if(!(o<16))return A.c(s,o) +s[o]=l&255;++p +if(j===58){if(p<8){++n +m=n +l=0 +k=!0 +continue}a2.$2(a1,n)}break}if(j===58){if(q<0){d=p+1;++n +q=p +p=d +m=n +continue}a2.$2("only one wildcard `::` is allowed",n)}if(q!==p-1)a2.$2("missing part",n) +break}if(n0){a=c*2 +a0=16-b*2 +B.k.bb(s,a0,16,s,a) +B.k.c5(s,a,a0,0)}}return s}, +hx(a,b,c,d,e,f,g){return new A.hw(a,b,c,d,e,f,g)}, +tH(a){if(a==="http")return 80 +if(a==="https")return 443 +return 0}, +eD(a,b,c){throw A.f(A.aD(c,a,b))}, +xC(a,b){var s,r,q +for(s=a.length,r=0;r=0&&b=0&&r=b&&o=b&&s=0&&r=o){if(h==null)h=new A.Y("") +if(q=0&&r=n){if(p==null)p=new A.Y("") +if(q=k)return"%" +s=b+1 +if(!(s>=0&&s=0))return A.c(a,l) +q=a.charCodeAt(l) +p=A.pE(r) +o=A.pE(q) +if(p<0||o<0)return"%" +n=p*16+o +if(n<127){if(!(n>=0))return A.c(m,n) +l=(m.charCodeAt(n)&1)!==0}else l=!1 +if(l)return A.a4(c&&65<=n&&90>=n?(n|32)>>>0:n) +if(r>=97||q>=97)return B.b.t(a,b,b+3).toUpperCase() +return null}, +qF(a){var s,r,q,p,o,n,m,l,k="0123456789ABCDEF" +if(a<=127){s=new Uint8Array(3) +s[0]=37 +r=a>>>4 +if(!(r<16))return A.c(k,r) +s[1]=k.charCodeAt(r) +s[2]=k.charCodeAt(a&15)}else{if(a>2047)if(a>65535){q=240 +p=4}else{q=224 +p=3}else{q=192 +p=2}r=3*p +s=new Uint8Array(r) +for(o=0;--p,p>=0;q=128){n=B.f.cI(a,6*p)&63|q +if(!(o>>4 +if(!(l<16))return A.c(k,l) +if(!(m=0&&q=m)return A.c(s,-1) +s.pop() +if(s.length===0)B.a.l(s,"")}p=!0}else{p="."===n +if(!p)B.a.l(s,n)}}if(p)B.a.l(s,"") +return B.a.aq(s,"/")}, +qI(a,b){var s,r,q,p,o,n +if(!A.tP(a))return!b?A.tI(a):a +s=A.i([],t.s) +for(r=a.split("/"),q=r.length,p=!1,o=0;o=s.length)return A.c(s,-1) +s.pop()}else B.a.l(s,"..") +p=!0}else{p="."===n +if(!p)B.a.l(s,n.length===0&&s.length===0?"./":n)}}if(s.length===0)return"./" +if(p)B.a.l(s,"") +if(!b){if(0>=s.length)return A.c(s,0) +B.a.k(s,0,A.tI(s[0]))}return B.a.aq(s,"/")}, +tI(a){var s,r,q,p=u.S,o=a.length +if(o>=2&&A.tJ(a.charCodeAt(0)))for(s=1;s127)throw A.f(A.W("Illegal percent encoding in URI",null)) +if(r===37){if(n+3>o)throw A.f(A.W("Truncated URI",null)) +B.a.l(p,A.xE(a,n+1)) +n+=2}else B.a.l(p,r)}}return d.b0(p)}, +tJ(a){var s=a|32 +return 97<=s&&s<=122}, +t5(a,b,c){var s,r,q,p,o,n,m,l,k="Invalid MIME type",j=A.i([b-1],t.Z) +for(s=a.length,r=b,q=-1,p=null;rb)throw A.f(A.aD(k,a,r)) +while(p!==44){B.a.l(j,r);++r +for(o=-1;r=0))return A.c(a,r) +p=a.charCodeAt(r) +if(p===61){if(o<0)o=r}else if(p===59||p===44)break}if(o>=0)B.a.l(j,o) +else{n=B.a.gA(j) +if(p!==44||r!==n+7||!B.b.aa(a,"base64",n+1))throw A.f(A.aD("Expecting '='",a,r)) +break}}B.a.l(j,r) +m=r+1 +if((j.length&1)===1)a=B.cJ.nA(a,m,s) +else{l=A.tQ(a,m,s,256,!0,!1) +if(l!=null)a=B.b.bR(a,m,s,l)}return new A.nS(a,j,c)}, +ub(a,b,c,d,e){var s,r,q,p,o,n='\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe1\xe1\x01\xe1\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe3\xe1\xe1\x01\xe1\x01\xe1\xcd\x01\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x0e\x03\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"\x01\xe1\x01\xe1\xac\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe1\xe1\x01\xe1\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xea\xe1\xe1\x01\xe1\x01\xe1\xcd\x01\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\n\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"\x01\xe1\x01\xe1\xac\xeb\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\xeb\xeb\xeb\x8b\xeb\xeb\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\xeb\x83\xeb\xeb\x8b\xeb\x8b\xeb\xcd\x8b\xeb\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x92\x83\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\xeb\x8b\xeb\x8b\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xebD\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x12D\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xe5\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\xe5\xe5\xe5\x05\xe5D\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe8\x8a\xe5\xe5\x05\xe5\x05\xe5\xcd\x05\xe5\x05\x05\x05\x05\x05\x05\x05\x05\x05\x8a\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05f\x05\xe5\x05\xe5\xac\xe5\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\xe5\xe5\xe5\x05\xe5D\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\xe5\x8a\xe5\xe5\x05\xe5\x05\xe5\xcd\x05\xe5\x05\x05\x05\x05\x05\x05\x05\x05\x05\x8a\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05f\x05\xe5\x05\xe5\xac\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7D\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\x8a\xe7\xe7\xe7\xe7\xe7\xe7\xcd\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\x8a\xe7\x07\x07\x07\x07\x07\x07\x07\x07\x07\xe7\xe7\xe7\xe7\xe7\xac\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7D\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\x8a\xe7\xe7\xe7\xe7\xe7\xe7\xcd\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\xe7\x8a\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\xe7\xe7\xe7\xe7\xe7\xac\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\x05\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x10\xea\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x12\n\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\v\n\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xec\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\xec\xec\xec\f\xec\xec\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\xec\xec\xec\xec\f\xec\f\xec\xcd\f\xec\f\f\f\f\f\f\f\f\f\xec\f\f\f\f\f\f\f\f\f\f\xec\f\xec\f\xec\f\xed\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\xed\xed\xed\r\xed\xed\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\xed\xed\xed\xed\r\xed\r\xed\xed\r\xed\r\r\r\r\r\r\r\r\r\xed\r\r\r\r\r\r\r\r\r\r\xed\r\xed\r\xed\r\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe1\xe1\x01\xe1\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xea\xe1\xe1\x01\xe1\x01\xe1\xcd\x01\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x0f\xea\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"\x01\xe1\x01\xe1\xac\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe1\xe1\x01\xe1\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xe1\xe9\xe1\xe1\x01\xe1\x01\xe1\xcd\x01\xe1\x01\x01\x01\x01\x01\x01\x01\x01\x01\t\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"\x01\xe1\x01\xe1\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x11\xea\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xe9\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\v\t\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\x13\xea\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xeb\xeb\v\xeb\xeb\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\xeb\xea\xeb\xeb\v\xeb\v\xeb\xcd\v\xeb\v\v\v\v\v\v\v\v\v\xea\v\v\v\v\v\v\v\v\v\v\xeb\v\xeb\v\xeb\xac\xf5\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\xf5\x15\xf5\x15\x15\xf5\x15\x15\x15\x15\x15\x15\x15\x15\x15\x15\xf5\xf5\xf5\xf5\xf5\xf5' +for(s=a.length,r=b;r95)q=31 +p=d*96+q +if(!(p<2112))return A.c(n,p) +o=n.charCodeAt(p) +d=o&31 +B.a.k(e,o>>>5,r)}return d}, +tB(a){if(a.b===7&&B.b.U(a.a,"package")&&a.c<=0)return A.ud(a.a,a.e,a.f) +return-1}, +ud(a,b,c){var s,r,q,p +for(s=a.length,r=b,q=0;r=0&&r=1)return a.$1(b) +return a.$0()}, +zq(a,b){var s=new A.aB($.an,b.h("aB<0>")),r=new A.h8(s,b.h("h8<0>")) +a.then(A.eI(new A.pS(r,b),1),A.eI(new A.pT(r),1)) +return s}, +u7(a){return a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string"||a instanceof Int8Array||a instanceof Uint8Array||a instanceof Uint8ClampedArray||a instanceof Int16Array||a instanceof Uint16Array||a instanceof Int32Array||a instanceof Uint32Array||a instanceof Float32Array||a instanceof Float64Array||a instanceof ArrayBuffer||a instanceof DataView}, +up(a){if(A.u7(a))return a +return new A.px(new A.dK(t.mp)).$1(a)}, +pS:function pS(a,b){this.a=a +this.b=b}, +pT:function pT(a){this.a=a}, +px:function px(a){this.a=a}, +ie:function ie(){}, +hQ:function hQ(a,b){this.a=a +this.b=b}, +rd(a,b,c){var s=new A.bQ(a,B.f.av(Date.now(),1000)) +s.Q=c +return s}, +bQ:function bQ(a,b){var _=this +_.a=a +_.b=420 +_.e=b +_.as=_.Q=null}, +dV:function dV(a,b){this.a=a +this.b=b}, +lJ:function lJ(a){this.a=a +this.c=this.b=0}, +vu(){return new A.lH()}, +lH:function lH(){var _=this +_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=_.a=$ +_.ay=0 +_.ch=-1 +_.cx=_.CW=0 +_.fr=_.dy=_.dx=_.db=_.cy=$ +_.fx=0}, +ot:function ot(a){var _=this +_.a=-1 +_.r=_.f=0 +_.x=a}, +x1(a,b,c){var s,r,q,p,o +if(a.gN(a))return new Uint8Array(0) +s=new Uint8Array(A.hC(a.goC(a))) +r=c*2+2 +q=A.rJ(A.rM(),64) +p=new A.nn(q) +q=q.b +q===$&&A.o() +p.c=new Uint8Array(q) +p.a=new A.no(b,1000,r) +o=new Uint8Array(r) +return B.k.am(o,0,p.mm(s,0,o,0))}, +or:function or(a,b){this.c=a +this.d=b}, +h7:function h7(a,b){this.a=a +this.b=b}, +ku:function ku(a,b,c,d){var _=this +_.b=0 +_.c=a +_.w=_.r=_.f=_.e=_.d=0 +_.x="" +_.y=null +_.z=b +_.Q=null +_.at=c +_.ay=_.ax=null +_.ch=d}, +kv:function kv(){var _=this +_.as=_.Q=_.y=_.x=_.w=_.a=0 +_.at="" +_.ch=_.ax=null}, +os:function os(){this.a=$}, +ix(a){var s=new A.mD() +s.jU(a) +return s}, +mD:function mD(){this.a=$ +this.b=0 +this.c=2147483647}, +oq:function oq(){}, +p6:function p6(){}, +mH:function mH(a,b){var _=this +_.a=a +_.b=null +_.c=b +_.e=_.d=0}, +t4(a,b){var s,r,q,p=a.length,o=b.length +if(p!==o)return!1 +for(s=0,r=0;r>>8&255 +a[2]=b>>>16&255 +a[3]=b>>>24&255 +for(s=a.$flags|0,r=4;r<=15;++r){s&2&&A.t(a) +if(!(r<16))return A.c(a,r) +a[r]=0}}, +lG:function lG(a,b,c){var _=this +_.a=1 +_.b=a +_.c=b +_.d=c +_.r=null +_.x=_.w=$}, +i0:function i0(a,b){this.a=a +this.b=b}, +r0(a,b){b&=31 +return(a&$.aM[b])<>>0}, +as(a,b){b&=31 +return(a>>>b|A.r0(a,32-b))>>>0}, +rL(a){var s,r=new A.fA() +if(A.lx(a))r.fv(a,null) +else{t.dl.a(a) +s=a.a +s===$&&A.o() +r.a=s +s=a.b +s===$&&A.o() +r.b=s}return r}, +rM(){var s=A.rL(0),r=new Uint8Array(4),q=t.S +q=new A.jy(s,r,B.cL,5,A.aE(5,0,!1,q),A.aE(80,0,!1,q)) +q.aL() +return q}, +rJ(a,b){var s=new A.jw(a,b) +s.b=20 +s.d=new Uint8Array(b) +s.e=new Uint8Array(b+20) +return s}, +nm:function nm(){}, +no:function no(a,b,c){this.a=a +this.b=b +this.c=c}, +nl:function nl(){}, +fz:function fz(a){this.a=a}, +nn:function nn(a){this.a=$ +this.b=a +this.c=$}, +jv:function jv(){}, +ju:function ju(){}, +fA:function fA(){this.b=this.a=$}, +jx:function jx(){}, +jy:function jy(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=$ +_.d=c +_.e=d +_.f=e +_.r=f +_.w=$}, +jw:function jw(a,b){var _=this +_.a=a +_.b=$ +_.c=b +_.e=_.d=$}, +nk:function nk(){}, +nj:function nj(a){var _=this +_.a=0 +_.b=$ +_.c=!1 +_.d=a}, +fe:function fe(){}, +it:function it(a){this.a=a}, +bv(a,b,c,d){var s,r,q=new A.e_(b) +if(d==null)d=0 +if(c==null)c=J.b6(a)-d +s=J.ad(a) +if(d+c>s.gn(a))c=s.gn(a)-d +r=t.ev.b(a)?a:new Uint8Array(A.hC(a)) +s=J.dS(B.k.ga9(r),r.byteOffset+d,c) +q.b=s +q.d=s.length +return q}, +e_:function e_(a){var _=this +_.b=null +_.c=0 +_.d=$ +_.a=a}, +iO:function iO(){}, +mI:function mI(a){this.a=a}, +qc(a){var s=a==null?32768:a +return new A.fy(new Uint8Array(s))}, +fy:function fy(a){this.b=0 +this.c=a}, +jq:function jq(){}, +y4(a,b,c,d){var s,r,q,p=b.length +if(p===0)return c +s=d-p +if(s=0}else q=!1 +if(!q)break +if(r>s)return-1 +if(A.qW(a,c,d,r)&&A.qW(a,c,d,r+p))return r +c=r+1}return-1}return A.y_(a,b,c,d)}, +y_(a,b,c,d){var s,r,q,p=new A.cP(a,d,c,260) +for(s=b.length;r=p.cX(),r>=0;){q=r+s +if(q>d)break +if(B.b.aa(a,b,r)&&A.qW(a,c,d,q))return r}return-1}, +d3:function d3(a){this.a=a}, +fR:function fR(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +qW(a,b,c,d){var s,r,q,p +if(b=0&&m=65&&h<=90&&h+32===j +l=g}else l=!0 +else l=!1 +if(!l)break}if(l)return A.ax(p.m(0,b))}}return-1}, +wS(a){var s,r +if(a===24)return"%" +else for(s=0;s<28;++s){r=B.d1[s] +if(A.ax(r.m(0,"unit"))===a)return A.hB(r.m(0,"value"))}return""}, +t0(a){var s +A:{if(0===a){s="ERROR" +break A}if(1===a){s="end of file" +break A}if(2===a){s="(" +break A}if(3===a){s=")" +break A}if(4===a){s="[" +break A}if(5===a){s="]" +break A}if(6===a){s="{" +break A}if(7===a){s="}" +break A}if(8===a){s="." +break A}if(9===a){s=";" +break A}if(10===a){s="@" +break A}if(11===a){s="#" +break A}if(12===a){s="+" +break A}if(13===a){s=">" +break A}if(14===a){s="~" +break A}if(15===a){s="*" +break A}if(16===a){s="|" +break A}if(17===a){s=":" +break A}if(18===a){s="_" +break A}if(19===a){s="," +break A}if(20===a){s=" " +break A}if(21===a){s="\t" +break A}if(22===a){s="\n" +break A}if(23===a){s="\r" +break A}if(24===a){s="%" +break A}if(25===a){s="'" +break A}if(26===a){s='"' +break A}if(27===a){s="/" +break A}if(28===a){s="=" +break A}if(30===a){s="^" +break A}if(31===a){s="$" +break A}if(32===a){s="<" +break A}if(33===a){s="!" +break A}if(34===a){s="-" +break A}if(35===a){s="\\" +break A}s=A.P(A.ce("Unknown TOKEN"))}return s}, +t_(a){switch(a){case 641:case 642:case 643:case 644:case 645:case 646:case 647:case 648:case 649:case 650:case 651:case 652:case 653:case 654:case 655:case 656:case 600:case 601:case 602:case 603:case 604:case 605:case 606:case 607:case 608:case 609:case 610:case 612:case 613:case 614:case 615:case 617:case 627:case 628:return!0 +default:return!1}}, +jY(a){var s +if(!(a>=97&&a<=122))s=a>=65&&a<=90||a===95||a>=160||a===92 +else s=!0 +return s}, +kR:function kR(a){this.a=a +this.c=null +this.d=$}, +I:function I(a,b){this.a=a +this.b=b}, +iz:function iz(a,b,c){this.c=a +this.a=b +this.b=c}, +jX:function jX(a,b,c,d,e,f,g,h,i){var _=this +_.w=a +_.x=b +_.y=c +_.z=d +_.Q=e +_.a=f +_.b=g +_.c=h +_.e=_.d=!1 +_.f=i +_.r=0}, +nO:function nO(){}, +ec:function ec(a,b){this.a=a +this.b=b}, +eb:function eb(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +j5:function j5(a,b,c){this.a=a +this.b=b +this.c=c}, +ns:function ns(a){this.w=a}, +cs:function cs(a,b){this.b=a +this.a=b}, +d4:function d4(a){this.a=a}, +jV:function jV(a){this.a=a}, +je:function je(a){this.a=a}, +jL:function jL(a,b){this.b=a +this.a=b}, +d_:function d_(a,b){this.b=a +this.a=b}, +fL:function fL(a,b,c){this.b=a +this.c=b +this.a=c}, +bc:function bc(){}, +di:function di(a,b){this.b=a +this.a=b}, +j6:function j6(a,b,c){this.d=a +this.b=b +this.a=c}, +hW:function hW(a,b,c,d){var _=this +_.d=a +_.e=b +_.b=c +_.a=d}, +iy:function iy(a,b){this.b=a +this.a=b}, +i3:function i3(a,b){this.b=a +this.a=b}, +ed:function ed(a,b){this.b=a +this.a=b}, +ee:function ee(a,b,c){this.d=a +this.b=b +this.a=c}, +fD:function fD(a,b,c){this.f=a +this.b=b +this.a=c}, +jE:function jE(a,b,c){this.d=a +this.b=b +this.a=c}, +eh:function eh(a,b){this.b=a +this.a=b}, +jf:function jf(a,b,c){this.d=a +this.b=b +this.a=c}, +jo:function jo(a){this.a=a}, +jn:function jn(a){this.a=a}, +al:function al(a,b,c){this.c=a +this.d=b +this.a=c}, +jm:function jm(a,b,c){this.c=a +this.d=b +this.a=c}, +bA:function bA(){}, +j0:function j0(a,b,c,d){var _=this +_.f=a +_.c=b +_.d=c +_.a=d}, +jz:function jz(a,b,c){this.c=a +this.d=b +this.a=c}, +ib:function ib(a,b,c){this.c=a +this.d=b +this.a=c}, +is:function is(a,b,c){this.c=a +this.d=b +this.a=c}, +hN:function hN(a,b,c,d){var _=this +_.f=a +_.c=b +_.d=c +_.a=d}, +jW:function jW(a,b,c,d){var _=this +_.f=a +_.c=b +_.d=c +_.a=d}, +iw:function iw(a,b,c,d){var _=this +_.f=a +_.c=b +_.d=c +_.a=d}, +iv:function iv(a,b,c){this.c=a +this.d=b +this.a=c}, +jI:function jI(a,b,c,d){var _=this +_.f=a +_.c=b +_.d=c +_.a=d}, +i1:function i1(a,b,c,d){var _=this +_.f=a +_.c=b +_.d=c +_.a=d}, +jG:function jG(a,b,c,d){var _=this +_.f=a +_.c=b +_.d=c +_.a=d}, +j1:function j1(a,b,c,d){var _=this +_.f=a +_.c=b +_.d=c +_.a=d}, +k6:function k6(a,b,c,d){var _=this +_.f=a +_.c=b +_.d=c +_.a=d}, +R:function R(){}, +ao:function ao(){}, +k7:function k7(){}, +vJ(a){var s,r=a.toLowerCase() +A:{if("application/xhtml+xml"===r||"text/html"===r){s=B.it +break A}if("application/x-dtbook+xml"===r){s=B.iu +break A}if("application/x-dtbncx+xml"===r){s=B.iA +break A}if("text/x-oeb1-document"===r){s=B.iB +break A}if("application/xml"===r){s=B.iC +break A}if("text/css"===r){s=B.iD +break A}if("text/x-oeb1-css"===r){s=B.iE +break A}if("image/gif"===r){s=B.iF +break A}if("image/jpeg"===r){s=B.iG +break A}if("image/png"===r){s=B.iH +break A}if("image/svg+xml"===r){s=B.iv +break A}if("image/bmp"===r){s=B.iw +break A}if("font/truetype"===r){s=B.ix +break A}if("font/opentype"===r||"application/vnd.ms-opentype"===r){s=B.iy +break A}s=B.iz +break A}return s}, +aT:function aT(a,b){this.a=a +this.b=b}, +ip:function ip(a,b,c){this.a=a +this.b=b +this.c=c}, +m9(a){var s=0,r=A.br(t.gw),q,p,o,n,m,l,k,j,i +var $async$m9=A.bs(function(b,c){if(b===1)return A.bo(c,r) +for(;;)switch(s){case 0:l=new A.os().ml(A.bv(t.L.a(a),B.F,null,null),null,null,!1) +s=3 +return A.c3(A.fG(l),$async$m9) +case 3:k=c +j=k.a.b +i=B.a.cq(j.a,new A.ma(),new A.mb()) +j=j.b +p=A.w(j) +o=t.lS +n=A.a7(new A.O(new A.Q(j,p.h("e?(1)").a(new A.mc()),p.h("Q<1,e?>")),o),o.h("h.E")) +m=B.a.aq(n,", ") +q=new A.eY(l,i,m,n,k,A.vG(new A.eY(l,i,m,n,k,null))) +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$m9,r)}, +ma:function ma(){}, +mb:function mb(){}, +mc:function mc(){}, +vz(a){return A.vy(a)}, +vy(a){var s,r,q=A.az(t.N,t.S),p=a.e.a,o=p.d.b,n=p.c.a +for(p=t.A,s=0;s=0)c.k(0,a,l)}for(a0=k.length,m=0;m=0)b.k(0,a,l)}for(i=0;i]*>(.*?)",!1),A.a5("]*>(.*?)

",!1),A.a5("]*>(.*?)",!1),A.a5("]*>(.*?)",!1)],t.im) +for(k=q,j=k.length,i=t.lg,h=0;h=e.length)return A.c(e,1) +e=e[1] +if(e==null)d=null +else{c=A.a5("<[^>]*>",!0) +d=B.b.ba(A.cO(e,c,""))}m=d +if(m!=null&&m.length!==0){l=B.b.d9(m,A.a5("\\s+",!0)) +if(J.b6(l)<=10)return m +else{k=l +j=A.w(k) +i=new A.cy(k,0,10,j.h("cy<1>")) +i.fO(k,0,10,j.c) +i=i.aq(0," ") +return i+"..."}}}}}catch(b){}k=A.a5("\\.[^.]+$",!0) +return A.cO(a0,k,"")}, +lM:function lM(a,b){this.a=a +this.b=b}, +lL:function lL(a,b){this.a=a +this.b=b}, +qa(a7,a8,a9){var s=0,r=A.br(t.kZ),q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6 +var $async$qa=A.bs(function(b0,b1){if(b0===1)return A.bo(b1,r) +for(;;)switch(s){case 0:if(a9.a===B.bG){p=a9.d.a +if(p==null||p.length===0)throw A.f(A.S("EPUB parsing error: TOC ID is empty.")) +o=A.bI(a9.c.a,new A.n0(p),t.A) +if(o==null)throw A.f(A.S("EPUB parsing error: TOC item "+p+" not found in EPUB manifest.")) +$.cY=A.qr(a8,o.b) +n=A.bI(new A.cE(a7.a,t.bW),new A.n1(),t.u) +if(n==null)throw A.f(A.S("EPUB parsing error: TOC file "+A.k($.cY)+" not found in archive.")) +m=n.bQ() +l=B.E.b0(m==null?$.dd():m) +m=t.P +k=A.e3(A.b2(new A.c1(A.o_(l)),"ncx","http://www.daisy.org/z3986/2005/ncx/"),m) +if(k==null)throw A.f(A.S("EPUB parsing error: TOC file does not contain ncx element.")) +j=A.e3(A.b2(new A.c1(k),"head","http://www.daisy.org/z3986/2005/ncx/"),m) +if(j==null)throw A.f(A.S(u.C)) +i=A.wd(j) +h=k.w$ +g=A.e3(A.b2(h,"docTitle","http://www.daisy.org/z3986/2005/ncx/"),m) +if(g==null)throw A.f(A.S("EPUB parsing error: TOC file does not contain docTitle element.")) +f=A.wc(g) +e=A.b2(h,"docAuthor","http://www.daisy.org/z3986/2005/ncx/") +d=e.$ti +c=d.h("ba<1,cm>") +b=A.a7(new A.ba(e,d.h("cm(1)").a(new A.n2()),c),c.h("h.E")) +a=A.e3(A.b2(h,"navMap","http://www.daisy.org/z3986/2005/ncx/"),m) +if(a==null)throw A.f(A.S("EPUB parsing error: TOC file does not contain navMap element.")) +a0=A.wf(a) +a1=A.e3(A.b2(h,"pageList","http://www.daisy.org/z3986/2005/ncx/"),m) +A:{if(a1 instanceof A.aG){m=A.wg(a1) +break A}if(a1==null){m=null +break A}throw A.f(new A.jF("None of the patterns in the switch expression the matched input value. See https://github.com/dart-lang/language/issues/3488 for details."))}h=A.b2(h,"navList","http://www.daisy.org/z3986/2005/ncx/") +e=h.$ti +d=e.h("ba<1,cn>") +a2=A.a7(new A.ba(h,e.h("cn(1)").a(new A.n3()),d),d.h("h.E")) +q=new A.f2(i,f,b,a0,m,a2) +s=1 +break}else{o=A.bI(a9.c.a,new A.n4(),t.A) +if(o==null)throw A.f(A.S("EPUB parsing error: TOC item, not found in EPUB manifest.")) +$.cY=A.qr(a8,o.b) +n=A.bI(new A.cE(a7.a,t.bW),new A.n5(),t.u) +if(n==null)throw A.f(A.S("EPUB parsing error: TOC file "+A.k($.cY)+" not found in archive.")) +a3=A.i($.cY.split("/"),t.s) +m=a3.length +if(m!==0){if(0>=m){q=A.c(a3,-1) +s=1 +break}a3.pop()}if(a3.length!==0)B.a.d2(a3,0) +$.cY=a3.length===0?"":B.a.aq(a3,"/")+"/" +m=n.bQ() +a4=B.E.b0(m==null?$.dd():m) +a5=A.o_(a4) +m=t.P +if(A.e3(A.b2(new A.c1(a5),"head",null),m)==null)throw A.f(A.S(u.C)) +a6=A.e3(A.b2(new A.c1(a5),"nav",null),m) +if(a6==null)throw A.f(A.S(u.C)) +q=new A.f2(null,new A.f4(a9.b.a),B.j7,A.rG(A.b2(a6.w$,"ol",null).gbU(0)),null,B.j8) +s=1 +break}case 1:return A.bp(q,r)}}) +return A.bq($async$qa,r)}, +qb(a){var s,r,q,p,o,n +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=null,p=null;s.p();){o=s.d +if(o==null)o=r.a(o) +n=o.b +switch(o.a.ga_().toLowerCase()){case"id":q=n +break +case"src":p=n +break}}if(p==null||p.length===0)throw A.f(A.S("Incorrect EPUB navigation content: content source is missing.")) +return new A.f3(q,p)}, +wa(a){var s,r,q,p,o,n +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=null,p=null;s.p();){o=s.d +if(o==null)o=r.a(o) +n=o.b +switch(o.a.ga_().toLowerCase()){case"id":q=n +break +case"href":o=$.cY +p=o.length<2||B.b.U(n,o)?n:$.pZ().dP(o+n) +break}}return new A.f3(q,p)}, +wb(a){var s=A.i([],t.s) +new A.O(a.w$.a,t.C).T(0,new A.mQ(s)) +return new A.cm(s)}, +wc(a){var s=A.i([],t.s) +new A.O(a.w$.a,t.C).T(0,new A.mR(s)) +return new A.f4(s)}, +wd(a){var s=A.i([],t.hJ) +new A.O(a.w$.a,t.C).T(0,new A.mS(s)) +return new A.il(s)}, +mT(a){var s=A.bI(A.b2(a.w$,"text",a.b.gcV()),new A.mU(),t.P) +if(s==null)throw A.f(A.S("Incorrect EPUB navigation label: label text element is missing.")) +return new A.cS(A.cH(s))}, +we(a){var s,r,q,p,o,n,m,l,k +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=null,p=null;s.p();){o=s.d +if(o==null)o=r.a(o) +n=o.b +switch(o.a.ga_().toLowerCase()){case"id":q=n +break +case"class":p=n +break}}m=A.i([],t.lu) +l=A.i([],t.cJ) +for(s=B.a.gF(a.w$.a),r=new A.bZ(s,t.k7),o=t.P;r.p();){k=o.a(s.gB()) +switch(k.b.ga_().toLowerCase()){case"navlabel":B.a.l(m,A.mT(k)) +break +case"navtarget":B.a.l(l,A.wj(k)) +break}}return new A.cn(q,p,m,l)}, +wf(a){var s=A.i([],t.nS) +new A.O(a.w$.a,t.C).T(0,new A.mW(s)) +return new A.f6(s)}, +rG(a){var s=A.i([],t.nS) +new A.O(a.w$.a,t.C).T(0,new A.mV(s)) +return new A.f6(s)}, +wg(a){var s,r,q,p,o=A.i([],t.mt) +for(s=B.a.gF(a.w$.a),r=new A.bZ(s,t.k7),q=t.P;r.p();){p=q.a(s.gB()) +if(p.b.ga_().toLowerCase()==="pagetarget")B.a.l(o,A.wh(p))}return new A.im(o)}, +wh(a){var s,r,q,p,o,n,m,l,k,j,i=null +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=t.m9,p=i,o=p,n=o,m=n;s.p();){l=s.d +if(l==null)l=r.a(l) +k=l.b +switch(l.a.ga_().toLowerCase()){case"id":m=k +break +case"value":n=k +break +case"type":new A.ig(B.jb,q).iO(k) +break +case"class":o=k +break +case"playorder":p=k +break}}j=A.i([],t.lu) +new A.O(a.w$.a,t.C).T(0,new A.mX(j)) +if(j.length===0)throw A.f(A.S("Incorrect EPUB navigation page target: at least one navLabel element is required.")) +return new A.f7(m,n,i,o,p,j,i)}, +rH(a){var s,r,q,p,o,n,m,l,k,j="EPUB parsing error: navigation point ",i={} +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=null,p=null,o=null;s.p();){n=s.d +if(n==null)n=r.a(n) +m=n.b +switch(n.a.ga_().toLowerCase()){case"id":q=m +break +case"class":p=m +break +case"playorder":o=m +break}}if(q==null||q.length===0)throw A.f(A.S("Incorrect EPUB navigation point: point ID is missing.")) +i.a=null +l=A.i([],t.lu) +k=A.i([],t.nS) +new A.O(a.w$.a,t.C).T(0,new A.mZ(i,l,k)) +if(l.length===0)throw A.f(A.S(j+q+" should contain at least one navigation label.")) +s=i.a +if(s==null)throw A.f(A.S(j+q+" should contain content.")) +return new A.co(q,p,o,l,s,k)}, +wi(a){var s,r,q={} +q.a=null +s=A.i([],t.lu) +r=A.i([],t.nS) +new A.O(a.w$.a,t.C).T(0,new A.mY(q,s,r)) +if(s.length===0)throw A.f(A.S("EPUB parsing error: navigation point null should contain at least one navigation label.")) +q=q.a +if(q==null)throw A.f(A.S("EPUB parsing error: navigation point null should contain content.")) +return new A.co(null,null,null,s,q,r)}, +wj(a){var s,r,q,p,o,n,m,l,k,j=null,i={} +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=j,p=q,o=p,n=o;s.p();){m=s.d +if(m==null)m=r.a(m) +l=m.b +switch(m.a.ga_().toLowerCase()){case"id":n=l +break +case"value":p=l +break +case"class":o=l +break +case"playorder":q=l +break}}if(n==null||n.length===0)throw A.f(A.S("Incorrect EPUB navigation target: navigation target ID is missing.")) +k=A.i([],t.lu) +i.a=null +new A.O(a.w$.a,t.C).T(0,new A.n_(i,k)) +if(k.length===0)throw A.f(A.S("Incorrect EPUB navigation target: at least one navLabel element is required.")) +return new A.f8(n,o,p,q,k,i.a)}, +n0:function n0(a){this.a=a}, +n1:function n1(){}, +n2:function n2(){}, +n3:function n3(){}, +n4:function n4(){}, +n5:function n5(){}, +mQ:function mQ(a){this.a=a}, +mR:function mR(a){this.a=a}, +mS:function mS(a){this.a=a}, +mU:function mU(){}, +mW:function mW(a){this.a=a}, +mV:function mV(a){this.a=a}, +mX:function mX(a){this.a=a}, +mZ:function mZ(a,b,c){this.a=a +this.b=b +this.c=c}, +mY:function mY(a,b,c){this.a=a +this.b=b +this.c=c}, +n_:function n_(a,b){this.a=a +this.b=b}, +wl(a){var s=A.i([],t.mE) +new A.O(a.w$.a,t.C).T(0,new A.n8(s)) +return new A.ii(s)}, +wm(a){var s=A.i([],t.bz) +new A.O(a.w$.a,t.C).T(0,new A.n9(s)) +return new A.ij(s)}, +wn(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c={} +c.a=null +s=t.s +r=A.i([],s) +q=A.i([],t.bS) +p=A.i([],s) +o=A.i([],s) +n=A.i([],t.l6) +m=A.i([],t.oc) +l=A.i([],s) +k=A.i([],s) +j=A.i([],t.oj) +i=A.i([],s) +h=A.i([],s) +g=A.i([],s) +f=A.i([],s) +e=A.i([],s) +d=A.i([],t.ik) +new A.O(a.w$.a,t.C).T(0,new A.na(c,r,q,p,o,n,m,l,k,j,i,h,g,f,e,b,d)) +return new A.ik(r,q,p,c.a,o,n,m,l,k,j,i,h,g,f,e,d)}, +wo(a){var s,r,q,p,o,n +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=null,p=null;s.p();){o=s.d +if(o==null)o=r.a(o) +n=o.b +switch(o.a.ga_().toLowerCase()){case"role":q=n +break +case"file-as":p=n +break}}return new A.f_(A.cH(a),p,q)}, +wp(a){var s,r,q,p,o,n +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=null,p=null;s.p();){o=s.d +if(o==null)o=r.a(o) +n=o.b +switch(o.a.ga_().toLowerCase()){case"role":q=n +break +case"file-as":p=n +break}}return new A.dl(A.cH(a),p,q)}, +wq(a){var s,r,q,p,o,n +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=null,p=null;s.p();){o=s.d +if(o==null)o=r.a(o) +n=o.b +switch(o.a.ga_().toLowerCase()){case"id":q=n +break +case"scheme":p=n +break}}return new A.f1(q,p,A.cH(a))}, +wr(a){var s,r,q,p,o,n,m=null +for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=m,p=q;s.p();){o=s.d +if(o==null)o=r.a(o) +n=o.b +switch(o.a.ga_().toLowerCase()){case"name":p=n +break +case"content":q=n +break}}return new A.cR(p,q,m,m,m,m,B.Ac)}, +ws(a){var s,r,q,p,o,n,m,l,k=null,j=t.N,i=A.az(j,j) +for(j=a.y$.a,s=A.w(j),j=new J.J(j,j.length,s.h("J<1>")),s=s.c,r=k,q=r,p=q,o=p;j.p();){n=j.d +if(n==null)n=s.a(n) +m=n.b +l=n.a.ga_().toLowerCase() +i.k(0,l,m) +switch(l){case"id":o=m +break +case"refines":p=m +break +case"property":q=m +break +case"scheme":r=m +break}}return new A.cR(k,A.cH(a),o,p,q,r,i)}, +qd(a,a0){var s=0,r=A.br(t.hl),q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b +var $async$qd=A.bs(function(a1,a2){if(a1===1)return A.bo(a2,r) +for(;;)switch(s){case 0:b=A.bI(new A.cE(a.a,t.bW),new A.nb(a0),t.u) +if(b==null)throw A.f(A.S("EPUB parsing error: root file not found in archive.")) +p=b.bQ() +o=B.E.b0(p==null?$.dd():p) +n=A.b2(A.o_(o).w$,"package","http://www.idpf.org/2007/opf").cp(0,new A.nc()) +m=n.cd("version") +if(m==="2.0")l=B.bG +else{if(m!=="3.0")throw A.f(A.S("Unsupported EPUB version: "+A.k(m)+".")) +l=B.cT}p=n.w$ +k=A.b2(p,"metadata","http://www.idpf.org/2007/opf") +j=t.q +i=A.eM(k,k.$ti.h("h.E"),j).cp(0,new A.nd()) +if(i==null)throw A.f(A.S("EPUB parsing error: metadata not found in the package.")) +h=A.wn(i,l) +k=A.b2(p,"manifest","http://www.idpf.org/2007/opf") +g=A.eM(k,k.$ti.h("h.E"),j).cp(0,new A.ne()) +if(g==null)throw A.f(A.S("EPUB parsing error: manifest not found in the package.")) +f=A.wm(g) +k=A.b2(p,"spine","http://www.idpf.org/2007/opf") +e=A.eM(k,k.$ti.h("h.E"),j).cp(0,new A.nf()) +if(e==null)throw A.f(A.S("EPUB parsing error: spine not found in the package.")) +d=A.wt(e) +c=A.bI(A.b2(p,"guide","http://www.idpf.org/2007/opf"),new A.ng(),t.P) +q=new A.io(l,h,f,d,c!=null?A.wl(c):null) +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$qd,r)}, +wt(a){var s=A.i([],t.jA),r=a.cd("toc"),q=a.cd("page-progression-direction"),p=q==null||q.toLowerCase()==="ltr" +new A.O(a.w$.a,t.C).T(0,new A.nh(s)) +return new A.iq(r,s,p)}, +n8:function n8(a){this.a=a}, +n9:function n9(a){this.a=a}, +na:function na(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p +_.ch=q}, +nb:function nb(a){this.a=a}, +nc:function nc(){}, +nd:function nd(){}, +ne:function ne(){}, +nf:function nf(){}, +ng:function ng(){}, +nh:function nh(a){this.a=a}, +qh(a){var s=0,r=A.br(t.jv),q,p,o,n,m +var $async$qh=A.bs(function(b,c){if(b===1)return A.bo(c,r) +for(;;)switch(s){case 0:m=A.bI(new A.cE(a.a,t.bW),new A.nD(),t.u) +if(m==null)throw A.f(A.S("EPUB parsing error: META-INF/container.xml file not found in archive.")) +p=m.bQ() +o=B.E.b0(p==null?$.dd():p) +p=t.P +n=A.bI(A.b2(new A.c1(A.o_(o)),"container","urn:oasis:names:tc:opendocument:xmlns:container"),new A.nE(),p) +if(n==null)throw A.f(A.S("EPUB parsing error: Invalid epub container")) +q=p.a(A.bI(new A.c1(n),new A.nF(),t.I)).cd("full-path") +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$qh,r)}, +nD:function nD(){}, +nE:function nE(){}, +nF:function nF(){}, +eY:function eY(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +bg:function bg(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +bu:function bu(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +dj:function dj(){}, +lU:function lU(a){this.a=a}, +ih:function ih(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +fb:function fb(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +f3:function f3(a,b){this.a=a +this.b=b}, +f2:function f2(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +cm:function cm(a){this.a=a}, +f4:function f4(a){this.a=a}, +il:function il(a){this.a=a}, +f5:function f5(a,b,c){this.a=a +this.b=b +this.c=c}, +cS:function cS(a){this.a=a}, +cn:function cn(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +f6:function f6(a){this.a=a}, +im:function im(a){this.a=a}, +f7:function f7(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +cT:function cT(a,b){this.a=a +this.b=b}, +co:function co(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +f8:function f8(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +ii:function ii(a){this.a=a}, +eZ:function eZ(a,b,c){this.a=a +this.b=b +this.c=c}, +ij:function ij(a){this.a=a}, +dk:function dk(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i}, +ik:function ik(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j +_.z=k +_.Q=l +_.as=m +_.at=n +_.ax=o +_.ay=p}, +f_:function f_(a,b,c){this.a=a +this.b=b +this.c=c}, +dl:function dl(a,b,c){this.a=a +this.b=b +this.c=c}, +f0:function f0(a,b){this.a=a +this.b=b}, +f1:function f1(a,b,c){this.a=a +this.b=b +this.c=c}, +cR:function cR(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +io:function io(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +iq:function iq(a,b,c){this.a=a +this.b=b +this.c=c}, +fa:function fa(a,b){this.a=a +this.b=b}, +ir:function ir(a,b){this.a=a +this.b=b}, +ig:function ig(a,b){this.a=a +this.$ti=b}, +lT:function lT(a,b){this.a=a +this.b=b}, +ro(){return new A.eT(A.ae(t.K,t.N))}, +rp(a,b,c){return new A.i9(a,b,c,A.ae(t.K,t.N))}, +qk(a){return new A.bY(a,A.ae(t.K,t.N))}, +q1(a,b){return new A.K(b,a,A.ae(t.K,t.N))}, +vI(a){var s +if(a==null||a==="http://www.w3.org/1999/xhtml"||a==="http://www.w3.org/1998/Math/MathML"||a==="http://www.w3.org/2000/svg")return"" +s=A.rF(a) +return s==null?"":s+":"}, +rm(a){return new A.i6(a,A.ae(t.K,t.N))}, +aO:function aO(a,b,c){this.a=a +this.b=b +this.c=c}, +kQ:function kQ(){}, +oU:function oU(){}, +kI:function kI(){}, +am:function am(){}, +eT:function eT(a){var _=this +_.a=null +_.b=a +_.d=_.c=$ +_.e=null}, +i9:function i9(a,b,c,d){var _=this +_.w=a +_.x=b +_.y=c +_.a=null +_.b=d +_.d=_.c=$ +_.e=null}, +bY:function bY(a,b){var _=this +_.w=a +_.a=null +_.b=b +_.d=_.c=$ +_.e=null}, +K:function K(a,b,c){var _=this +_.w=a +_.x=b +_.a=null +_.b=c +_.d=_.c=$ +_.e=null}, +lR:function lR(a){this.a=a}, +i6:function i6(a,b){var _=this +_.w=a +_.a=null +_.b=b +_.d=_.c=$ +_.e=null}, +ji:function ji(a,b){this.b=a +this.a=b}, +iu:function iu(a){this.a=a}, +md:function md(){}, +kF:function kF(){}, +kG:function kG(){}, +kH:function kH(){}, +kJ:function kJ(){}, +kK:function kK(){}, +kN:function kN(){}, +uE(a){var s,r,q=A.i([],t.bD),p=A.i([],t.il),o=A.i([],t.lB) +p=new A.nP("http://www.w3.org/1999/xhtml",p,new A.hH(o)) +p.aL() +o=A.q7(t.N) +s=A.i([],t.Z) +s=new A.mA(A.yI(null),!1,null,o,s) +s.f=new A.ah(a) +s.a="utf-8" +s.aL() +o=new A.ff(s,!0,!0,!1,A.q7(t.nU),new A.Y(""),new A.Y(""),new A.Y("")) +o.aL() +r=new A.mB(!1,o,p,q) +o.f=r +r.kE() +p=p.b +p===$&&A.o() +return p}, +mB:function mB(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.e=d +_.f=!1 +_.r="no quirks" +_.w=null +_.x=$ +_.y=null +_.z=!0 +_.ok=_.k4=_.k3=_.k2=_.k1=_.id=_.go=_.fy=_.fx=_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=_.at=_.as=_.Q=$}, +aa:function aa(){}, +nq:function nq(a){this.a=a}, +np:function np(a){this.a=a}, +iN:function iN(a,b){this.a=a +this.b=b}, +hZ:function hZ(a,b){this.a=a +this.b=b}, +hY:function hY(a,b){this.a=a +this.b=b}, +iG:function iG(a,b){this.a=a +this.b=b}, +hM:function hM(a,b){this.a=a +this.b=b}, +iA:function iA(a,b){this.c=!1 +this.a=a +this.b=b}, +mF:function mF(a){this.a=a}, +mE:function mE(a){this.a=a}, +jU:function jU(a,b){this.a=a +this.b=b}, +iL:function iL(a,b){this.a=a +this.b=b}, +fg:function fg(a,b,c){var _=this +_.c=null +_.d=a +_.a=b +_.b=c}, +mG:function mG(){}, +iB:function iB(a,b){this.a=a +this.b=b}, +iD:function iD(a,b){this.a=a +this.b=b}, +iK:function iK(a,b){this.a=a +this.b=b}, +iH:function iH(a,b){this.a=a +this.b=b}, +iC:function iC(a,b){this.a=a +this.b=b}, +iJ:function iJ(a,b){this.a=a +this.b=b}, +iI:function iI(a,b){this.a=a +this.b=b}, +iE:function iE(a,b){this.a=a +this.b=b}, +hK:function hK(a,b){this.a=a +this.b=b}, +iF:function iF(a,b){this.a=a +this.b=b}, +hL:function hL(a,b){this.a=a +this.b=b}, +hI:function hI(a,b){this.a=a +this.b=b}, +hJ:function hJ(a,b){this.a=a +this.b=b}, +bb:function bb(a,b,c){this.a=a +this.b=b +this.c=c}, +rF(a){var s +A:{if("http://www.w3.org/1999/xhtml"===a){s="html" +break A}if("http://www.w3.org/1998/Math/MathML"===a){s="math" +break A}if("http://www.w3.org/2000/svg"===a){s="svg" +break A}if("http://www.w3.org/1999/xlink"===a){s="xlink" +break A}if("http://www.w3.org/XML/1998/namespace"===a){s="xml" +break A}if("http://www.w3.org/2000/xmlns/"===a){s="xmlns" +break A}s=null +break A}return s}, +a8(a){A.hB(a) +if(a==null)return!1 +if(0>=a.length)return A.c(a,0) +return A.qY(a.charCodeAt(0))}, +qY(a){switch(a){case 9:case 10:case 12:case 13:case 32:return!0}return!1}, +b4(a){var s,r +if(a==null)return!1 +if(0>=a.length)return A.c(a,0) +s=a.charCodeAt(0) +if(!(s>=97&&s<=122))r=s>=65&&s<=90 +else r=!0 +return r}, +pJ(a){var s +if(a==null)return!1 +if(0>=a.length)return A.c(a,0) +s=a.charCodeAt(0) +return s>=48&&s<58}, +uy(a){if(a==null)return!1 +if(0>=a.length)return A.c(a,0) +switch(a.charCodeAt(0)){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 65:case 66:case 67:case 68:case 69:case 70:case 97:case 98:case 99:case 100:case 101:case 102:return!0}return!1}, +c9(a){var s=new A.ah(a) +if(s.aH(s,A.yN())){s=t.gS +return A.aA(new A.Q(new A.ah(a),s.h("b(C.E)").a(A.yM()),s.h("Q")),0,null)}return a}, +vt(a){A.ax(a) +return a>=65&&a<=90}, +vs(a){A.ax(a) +return a>=65&&a<=90?a+97-65:a}, +nB:function nB(){}, +ia:function ia(a){this.a=a}, +kD:function kD(){}, +qx(a){return new A.ew()}, +lS:function lS(a){this.a=a +this.b=-1}, +lN:function lN(a){this.a=a}, +ew:function ew(){}, +yb(a){if(32<=a&&a<=126)return!1 +if(1<=a&&a<=8)return!0 +if(14<=a&&a<=31)return!0 +if(127<=a&&a<=159)return!0 +if(55296<=a&&a<=57343)return!0 +if(64976<=a&&a<=65007)return!0 +switch(a){case 11:case 65534:case 65535:case 131070:case 131071:case 196606:case 196607:case 262142:case 262143:case 327678:case 327679:case 393214:case 393215:case 458750:case 458751:case 524286:case 524287:case 589822:case 589823:case 655358:case 655359:case 720894:case 720895:case 786430:case 786431:case 851966:case 851967:case 917502:case 917503:case 983038:case 983039:case 1048574:case 1048575:case 1114110:case 1114111:return!0}return!1}, +yI(a){var s=A.a5("[\t-\r -/:-@[-`{-~]",!0) +if(a==null)return null +return B.vX.m(0,A.cO(a,s,"").toLowerCase())}, +xU(a,b){var s +A:{if("ascii"===a){s=new A.ah(B.id.b0(b)) +break A}if("utf-8"===a){s=new A.ah(B.E.b0(b)) +break A}s=A.P(A.W("Encoding "+a+" not supported",null))}return s}, +mA:function mA(a,b,c,d,e){var _=this +_.a=a +_.b=!0 +_.c=b +_.d=c +_.f=_.e=null +_.r=d +_.w=null +_.x=e +_.y=0}, +b9:function b9(){}, +zr(a,b){var s=A.i([],t.il) +new A.d0().f9(a,A.qN(b),s) +return s}, +qN(a){var s,r,q,p=null,o=t.kU,n=A.i([],o),m=t.m3.a(B.a.ghF(n)) +o=A.i([],o) +$.eE.b=new A.j5(m,B.hx,o) +o=new A.ah(a) +m=A.i([0],t.Z) +s=o.gn(0) +r=new A.jN(p,m,new Uint32Array(s)) +r.fN(o,p) +o=new A.jX(85,117,43,63,new A.ah("CDATA"),r,a,!0,0) +m=new A.kR(o) +m.d=o.c9() +o=o.e=!0 +q=m.ip() +if(q!=null?n.length!==0:o)throw A.f(A.aD("'"+a+"' is not a valid selector: "+A.k(n),p,p)) +return q}, +rW(a){switch(a){case"before":case"after":case"first-line":case"first-letter":return!0 +default:return!1}}, +wL(a){var s,r +while(a!=null){s=a.b.m(0,"lang") +if(s!=null)return s +r=a.a +a=r instanceof A.K?r:null}return null}, +d0:function d0(){this.a=null}, +nI:function nI(){}, +nJ:function nJ(){}, +nH:function nH(){}, +nG:function nG(a){this.a=a}, +aZ(a,b,c,d){return new A.d2(b==null?A.ae(t.K,t.N):b,c,a,d)}, +bl:function bl(){}, +cA:function cA(){}, +d2:function d2(a,b,c,d){var _=this +_.e=a +_.r=!1 +_.w=b +_.b=c +_.c=d +_.a=null}, +H:function H(a,b){this.b=a +this.c=b +this.a=null}, +bK:function bK(){}, +j:function j(a,b,c){var _=this +_.e=a +_.b=b +_.c=c +_.a=null}, +D:function D(a,b){this.b=a +this.c=b +this.a=null}, +dC:function dC(a,b){this.b=a +this.c=b +this.a=null}, +dU:function dU(a,b){this.b=a +this.c=b +this.a=null}, +eS:function eS(a){var _=this +_.c=_.b=null +_.d="" +_.e=a +_.a=null}, +jS:function jS(){this.a=null +this.b=$}, +ff:function ff(a,b,c,d,e,f,g,h){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.f=null +_.r=e +_.w=null +_.x=$ +_.y=f +_.z=$ +_.at=_.as=_.Q=null +_.ax=g +_.ay=h}, +mC:function mC(a){this.a=a}, +yo(a,b){var s,r,q=a.a +if(q!==b.a)return!1 +if(q===0)return!0 +for(q=new A.cv(a,a.r,a.e,A.x(a).h("cv<1>"));q.p();){s=q.d +r=b.m(0,s) +if(r==null&&!b.a7(s))return!1 +if(a.m(0,s)!=r)return!1}return!0}, +t2(a,b,c,d){var s,r,q,p,o=a.gL() +if(d==null)if(!o.gN(o)&&o.gA(o) instanceof A.bY){s=t.oI.a(o.gA(o)) +s.hM(b) +if(c!=null){r=c.a +q=s.e +s.e=r.K(A.cU(q.a,q.b).b,A.cU(r,c.c).b)}}else{r=A.qk(b) +r.e=c +o.l(0,r)}else{p=o.al(o,d) +if(p>0){r=p-1 +q=o.a +if(!(r=0&&rs?s:c)}, +qQ(a){var s,r +for(s=a.length,r=0;r")),q=q.c;j.p();){l=j.d +m.$2(l==null?q.a(l):l,B.bi)}n.$0() +return A.v(["blocks",s,"anchors",p,"length",k.a],r,t.X)}, +pn:function pn(a){this.a=a}, +po:function po(){}, +pj:function pj(a,b,c){this.a=a +this.b=b +this.c=c}, +pk:function pk(){}, +pl:function pl(){}, +pm:function pm(){}, +pp:function pp(a,b){this.a=a +this.b=b}, +pq:function pq(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +pr:function pr(){}, +pR(a,b){return A.zp(a,b)}, +zp(a,b){var s=0,r=A.br(t.f),q,p=2,o=[],n,m,l,k,j,i +var $async$pR=A.bs(function(c,d){if(c===1){o.push(d) +s=p}for(;;)switch(s){case 0:p=4 +j=A +i=b.m(0,"id") +s=7 +return A.c3(a.eJ(A.q(b.m(0,"command")),b.m(0,"argument")),$async$pR) +case 7:m=j.v(["id",i,"result",d],t.N,t.X) +q=m +s=1 +break +p=2 +s=6 +break +case 4:p=3 +k=o.pop() +m=A.bP(k) +if(m instanceof A.f9){n=m +m=b.m(0,"id") +n.toString +n.toString +q=A.v(["id",m,"error","unsupportedFixedLayout","message","Fixed-layout EPUB documents are not supported."],t.N,t.X) +s=1 +break}else{m=A.v(["id",b.m(0,"id"),"error","invalidDocument","message","The EPUB document or chapter is invalid or malformed."],t.N,t.X) +q=m +s=1 +break}s=6 +break +case 3:s=2 +break +case 6:case 1:return A.bp(q,r) +case 2:return A.bo(o.at(-1),r)}}) +return A.bq($async$pR,r)}, +lV:function lV(a,b){this.a=null +this.b=a +this.c=b}, +lX:function lX(){}, +m4:function m4(a,b){this.a=a +this.b=b}, +m2:function m2(a){this.a=a}, +m3:function m3(a){this.a=a}, +lY:function lY(a){this.a=a}, +lZ:function lZ(a){this.a=a}, +m_:function m_(){}, +m0:function m0(){}, +m1:function m1(){}, +lW:function lW(){}, +m7:function m7(a,b){this.a=a +this.b=b}, +m8:function m8(){}, +m5:function m5(){}, +m6:function m6(){}, +f9:function f9(){}, +u8(a){return a}, +uf(a,b){var s,r,q,p,o,n,m,l +for(s=b.length,r=1;r=1;s=q){q=s-1 +if(b[q]!=null)break}p=new A.Y("") +o=a+"(" +p.a=o +n=A.w(b) +m=n.h("cy<1>") +l=new A.cy(b,0,s,m) +l.fO(b,0,s,n.c) +m=o+new A.Q(l,m.h("e(G.E)").a(new A.pg()),m.h("Q")).aq(0,", ") +p.a=m +p.a=m+("): part "+(r-1)+" was null, but part "+r+" was not.") +throw A.f(A.W(p.j(0),null))}}, +lO:function lO(a){this.a=a}, +lP:function lP(){}, +lQ:function lQ(){}, +pg:function pg(){}, +e1:function e1(){}, +jr(a,b){var s,r,q,p,o,n,m=b.iQ(a) +b.bO(a) +if(m!=null)a=B.b.ab(a,m.length) +s=t.s +r=A.i([],s) +q=A.i([],s) +s=a.length +if(s!==0){if(0>=s)return A.c(a,0) +p=b.by(a.charCodeAt(0))}else p=!1 +if(p){if(0>=s)return A.c(a,0) +B.a.l(q,a[0]) +o=1}else{B.a.l(q,"") +o=0}for(n=o;n").u(e).h("fq<1,2>"))}, +fq:function fq(a,b,c,d){var _=this +_.b=a +_.c=b +_.a=c +_.$ti=d}, +fU:function fU(a,b){this.a=a +this.$ti=b}, +uG(a,b,c,d){var s,r,q=B.b.U(a,"^"),p=q?B.b.ab(a,1):a,o=t.s,n=b?A.i([p.toLowerCase(),p.toUpperCase()],o):A.i([p],o),m=d?$.vc():$.vb() +o=A.w(n) +s=A.uC(new A.dn(n,o.h("h(1)").a(new A.pQ(m)),o.h("dn<1,ab>")),d) +if(q)s=s instanceof A.ck?new A.ck(!s.a):new A.jj(s) +o=A.uM(a,d) +r=b?" (case-insensitive)":"" +c="["+o+"]"+r+" expected" +return A.bH(s,c,d)}, +tZ(a){var s=A.bH(B.W,"input expected",a),r=t.N,q=t.eN,p=A.dt(s,new A.pc(a),!1,r,q) +return A.rY(A.nr(A.cj(A.i([A.dz(new A.dB(s,A.ui("-",!1,null,!1),s,t.bT),new A.pd(a),r,r,r,q),p],t.fa),null,q),0,9007199254740991,q),new A.id("end of input expected"),null,t.aI)}, +pQ:function pQ(a){this.a=a}, +pc:function pc(a){this.a=a}, +pd:function pd(a){this.a=a}, +ca:function ca(){}, +fM:function fM(a){this.a=a}, +ck:function ck(a){this.a=a}, +j4:function j4(a,b,c){this.a=a +this.b=b +this.c=c}, +jj:function jj(a){this.a=a}, +ab:function ab(a,b){this.a=a +this.b=b}, +k8:function k8(){}, +uM(a,b){var s=b?new A.bV(a):new A.ah(a) +return s.c8(s,new A.pY(),t.N).aQ(0)}, +pY:function pY(){}, +zn(a,b,c){var s=new A.ah(b?a.toLowerCase()+a.toUpperCase():a) +return A.uC(s.c8(s,new A.pP(),t.eN),!1)}, +uC(a,b){var s,r,q,p,o,n,m,l,k=A.a7(a,t.eN) +k.$flags=1 +s=k +B.a.bV(s,new A.pN()) +r=A.i([],t.lU) +for(k=s.length,q=0;q=p.a)B.a.k(r,r.length-1,new A.ab(o.a,p.b)) +else B.a.l(r,p)}}n=B.a.cQ(r,0,new A.pO(),t.S) +if(n===0)return B.is +else{if(!(b&&n-1===1114111))k=!b&&n-1===65535 +else k=!0 +if(k)return B.W +else{k=r.length +if(k===1){if(0>=k)return A.c(r,0) +k=r[0] +m=k.a +return m===k.b?new A.fM(m):k}else{k=B.a.gbv(r) +m=B.a.gA(r) +l=B.f.b5(B.a.gA(r).b-B.a.gbv(r).a+31+1,5) +k=new A.j4(k.a,m.b,new Uint32Array(l)) +k.jV(r) +return k}}}}, +pP:function pP(){}, +pN:function pN(){}, +pO:function pO(){}, +cj(a,b,c){var s=b==null?A.z4():b,r=A.a7(a,c.h("n<0>")) +r.$flags=1 +return new A.eO(s,r,c.h("eO<0>"))}, +eO:function eO(a,b,c){this.b=a +this.a=b +this.$ti=c}, +au:function au(){}, +uK(a,b,c,d){return new A.fH(a,b,c.h("@<0>").u(d).h("fH<1,2>"))}, +wI(a,b,c,d,e){return A.dt(a,new A.nv(b,c,d,e),!1,c.h("@<0>").u(d).h("+(1,2)"),e)}, +fH:function fH(a,b,c){this.a=a +this.b=b +this.$ti=c}, +nv:function nv(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +c5(a,b,c,d,e,f){return new A.dB(a,b,c,d.h("@<0>").u(e).u(f).h("dB<1,2,3>"))}, +dz(a,b,c,d,e,f){return A.dt(a,new A.nw(b,c,d,e,f),!1,c.h("@<0>").u(d).u(e).h("+(1,2,3)"),f)}, +dB:function dB(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +nw:function nw(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e}, +pU(a,b,c,d,e,f,g,h){return new A.fI(a,b,c,d,e.h("@<0>").u(f).u(g).u(h).h("fI<1,2,3,4>"))}, +nx(a,b,c,d,e,f,g){return A.dt(a,new A.ny(b,c,d,e,f,g),!1,c.h("@<0>").u(d).u(e).u(f).h("+(1,2,3,4)"),g)}, +fI:function fI(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.$ti=e}, +ny:function ny(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f}, +uL(a,b,c,d,e,f,g,h,i,j){return new A.fJ(a,b,c,d,e,f.h("@<0>").u(g).u(h).u(i).u(j).h("fJ<1,2,3,4,5>"))}, +rT(a,b,c,d,e,f,g,h){return A.dt(a,new A.nz(b,c,d,e,f,g,h),!1,c.h("@<0>").u(d).u(e).u(f).u(g).h("+(1,2,3,4,5)"),h)}, +fJ:function fJ(a,b,c,d,e,f){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.$ti=f}, +nz:function nz(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +wJ(a,b,c,d,e,f,g,h,i,j,k){return A.dt(a,new A.nA(b,c,d,e,f,g,h,i,j,k),!1,c.h("@<0>").u(d).u(e).u(f).u(g).u(h).u(i).u(j).h("+(1,2,3,4,5,6,7,8)"),k)}, +fK:function fK(a,b,c,d,e,f,g,h,i){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.$ti=i}, +nA:function nA(a,b,c,d,e,f,g,h,i,j){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g +_.w=h +_.x=i +_.y=j}, +ds:function ds(){}, +bT:function bT(a,b,c){this.b=a +this.a=b +this.$ti=c}, +rY(a,b,c,d){var s=c==null?new A.cQ(null,t.cC):c,r=b==null?new A.cQ(null,t.cC):b +return new A.fP(s,r,a,d.h("fP<0>"))}, +fP:function fP(a,b,c,d){var _=this +_.b=a +_.c=b +_.a=c +_.$ti=d}, +id:function id(a){this.a=a}, +cQ:function cQ(a,b){this.a=a +this.$ti=b}, +jg:function jg(a){this.a=a}, +bH(a,b,c){var s +switch(c){case!1:s=a instanceof A.ck&&a.a?new A.hO(a,b):new A.ej(a,b) +break +case!0:s=a instanceof A.ck&&a.a?new A.hP(a,b):new A.fV(a,b) +break +default:s=null}return s}, +i2:function i2(){}, +fC:function fC(a,b,c){this.a=a +this.b=b +this.c=c}, +ej:function ej(a,b){this.a=a +this.b=b}, +hO:function hO(a,b){this.a=a +this.b=b}, +zx(a,b,c){var s=a.length +if(b)s=new A.fC(s,new A.pW(a),'"'+a+'" (case-insensitive) expected') +else s=new A.fC(s,new A.pX(a),'"'+a+'" expected') +return s}, +pW:function pW(a){this.a=a}, +pX:function pX(a){this.a=a}, +fV:function fV(a,b){this.a=a +this.b=b}, +hP:function hP(a,b){this.a=a +this.b=b}, +rU(a,b,c,d){if(a instanceof A.ej)return new A.jH(a.a,d,b,c) +else return new A.cp(d,A.nr(a,b,c,t.N))}, +jH:function jH(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +bj:function bj(a,b,c,d,e){var _=this +_.e=a +_.b=b +_.c=c +_.a=d +_.$ti=e}, +fm:function fm(){}, +nr(a,b,c,d){return new A.fB(b,c,a,d.h("fB<0>"))}, +fB:function fB(a,b,c,d){var _=this +_.b=a +_.c=b +_.a=c +_.$ti=d}, +dA:function dA(){}, +cU(a,b){if(b<0)A.P(A.aQ("Offset may not be negative, was "+b+".")) +else if(b>a.c.length)A.P(A.aQ("Offset "+b+u.D+a.gn(0)+".")) +return new A.bh(a,b)}, +qy(a,b,c){if(ca.c.length)A.P(A.aQ("End "+c+u.D+a.gn(0)+".")) +else if(b<0)A.P(A.aQ("Start may not be negative, was "+b+".")) +return new A.aw(a,b,c)}, +jN:function jN(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +bh:function bh(a,b){this.a=a +this.b=b}, +aw:function aw(a,b,c){this.a=a +this.b=b +this.c=c}, +vO(a,b){var s=A.vP(A.i([A.xd(a,!0)],t.g7)),r=new A.my(b).$0(),q=B.f.j(B.a.gA(s).b+1),p=A.vQ(s)?0:3,o=A.w(s) +return new A.me(s,r,null,1+Math.max(q.length,p),new A.Q(s,o.h("b(1)").a(new A.mg()),o.h("Q<1,b>")).o6(0,B.ic),!A.zh(new A.Q(s,o.h("p?(1)").a(new A.mh()),o.h("Q<1,p?>"))),new A.Y(""))}, +vQ(a){var s,r,q +for(s=0;s"));r.p();)J.vp(r.d,new A.mk()) +s=s.h("dq<1,2>") +r=s.h("dn") +s=A.a7(new A.dn(new A.dq(q,s),s.h("h(h.E)").a(new A.ml()),r),r.h("h.E")) +return s}, +xd(a,b){var s=new A.oP(a).$0() +return new A.aL(s,!0,null)}, +xf(a){var s,r,q,p,o,n,m=a.gZ() +if(!B.b.C(m,"\r\n"))return a +s=a.gV().gaw() +for(r=m.length-1,q=0;q=0))return A.c(a,s) +if(a.charCodeAt(s)===10)return r===1?0:r-B.b.dO(a,"\n",r-2)-1 +else return r-B.b.cU(a,"\n")-1}}, +me:function me(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +my:function my(a){this.a=a}, +mg:function mg(){}, +mf:function mf(){}, +mh:function mh(){}, +mj:function mj(){}, +mk:function mk(){}, +ml:function ml(){}, +mi:function mi(a){this.a=a}, +mz:function mz(){}, +mm:function mm(a){this.a=a}, +mt:function mt(a,b,c){this.a=a +this.b=b +this.c=c}, +mu:function mu(a,b){this.a=a +this.b=b}, +mv:function mv(a){this.a=a}, +mw:function mw(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +mr:function mr(a,b){this.a=a +this.b=b}, +ms:function ms(a,b){this.a=a +this.b=b}, +mn:function mn(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +mo:function mo(a,b,c){this.a=a +this.b=b +this.c=c}, +mp:function mp(a,b,c){this.a=a +this.b=b +this.c=c}, +mq:function mq(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +mx:function mx(a,b,c){this.a=a +this.b=b +this.c=c}, +aL:function aL(a,b,c){this.a=a +this.b=b +this.c=c}, +oP:function oP(a){this.a=a}, +bD:function bD(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +jO(a,b,c,d){if(a<0)A.P(A.aQ("Offset may not be negative, was "+a+".")) +else if(c<0)A.P(A.aQ("Line may not be negative, was "+c+".")) +else if(b<0)A.P(A.aQ("Column may not be negative, was "+b+".")) +return new A.bW(d,a,c,b)}, +bW:function bW(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +jP:function jP(){}, +jQ:function jQ(){}, +ek:function ek(){}, +nL(a,b,c,d){var s=new A.cd(d,a,b,c) +s.jW(a,b,c) +if(!B.b.C(d,c))A.P(A.W('The context line "'+d+'" must contain "'+c+'".',null)) +if(A.pA(d,c,a.gao())==null)A.P(A.W('The span text "'+c+'" must start at column '+(a.gao()+1)+' in a line within "'+d+'".',null)) +return s}, +cd:function cd(a,b,c,d){var _=this +_.d=a +_.a=b +_.b=c +_.c=d}, +aJ:function aJ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +yB(a){var s=a.d8(0) +s.toString +switch(s){case"<":return"<" +case"&":return"&" +case"]]>":return"]]>" +default:return A.qJ(s)}}, +yw(a){var s=a.d8(0) +s.toString +switch(s){case"'":return"'" +case"&":return"&" +case"<":return"<" +default:return A.qJ(s)}}, +xZ(a){var s=a.d8(0) +s.toString +switch(s){case'"':return""" +case"&":return"&" +case"<":return"<" +default:return A.qJ(s)}}, +qJ(a){var s=t.mO +return A.rE(new A.bV(a),s.h("e(h.E)").a(new A.p8()),s.h("h.E"),t.N).aQ(0)}, +kd:function kd(){}, +p8:function p8(){}, +d5:function d5(){}, +ag:function ag(a,b,c){this.c=a +this.a=b +this.b=c}, +bm:function bm(a,b){this.a=a +this.b=b}, +kk:function kk(){}, +kl:function kl(){}, +tg(a,b,c){return new A.ko(a)}, +kp(a){if(a.gca()!=null)throw A.f(A.tg(u.d,a,a.gca()))}, +ko:function ko(a){this.a=a}, +er(a,b,c){return new A.kq(b,c,$,$,$,a)}, +kq:function kq(a,b,c,d,e,f){var _=this +_.b=a +_.c=b +_.ax$=c +_.ay$=d +_.ch$=e +_.a=f}, +lr:function lr(){}, +qq(a,b,c,d,e){return new A.kr(c,e,$,$,$,a)}, +th(a,b,c,d){return A.qq("Expected , but found ",b,c,a,d)}, +ti(a,b,c){return A.qq("Unexpected ",a,b,null,c)}, +x0(a,b,c){return A.qq("Missing ",null,b,a,c)}, +kr:function kr(a,b,c,d,e,f){var _=this +_.d=a +_.e=b +_.ax$=c +_.ay$=d +_.ch$=e +_.a=f}, +lt:function lt(){}, +wZ(a,b,c){return new A.h2(a)}, +tf(a,b){if(!b.C(0,a.gaS()))throw A.f(new A.h2("Got "+a.gaS().j(0)+", but expected one of "+b.aq(0,", ")))}, +h2:function h2(a){this.a=a}, +c1:function c1(a){this.a=a}, +ke:function ke(a){this.a=a +this.b=$}, +cH(a){var s=t.n8 +return new A.ba(new A.b_(new A.c1(a),s.h("A(h.E)").a(new A.on()),s.h("b_")),s.h("e?(h.E)").a(new A.oo()),s.h("ba")).aQ(0)}, +on:function on(){}, +oo:function oo(){}, +nX:function nX(){}, +ep:function ep(){}, +nY:function nY(){}, +d6:function d6(){}, +cG:function cG(){}, +aS:function aS(){}, +Z:function Z(){}, +op:function op(){}, +aH:function aH(){}, +kn:function kn(){}, +nW(a,b,c){var s=new A.aR(a,b,c,null) +A.x(a).h("Z.T").a(s) +A.kp(a) +a.x$=s +return s}, +aR:function aR(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.x$=d}, +l_:function l_(){}, +l0:function l0(){}, +en:function en(a,b){this.a=a +this.x$=b}, +fY:function fY(a,b){this.a=a +this.x$=b}, +kb:function kb(){}, +l1:function l1(){}, +tb(a){var s=A.h1(t.G),r=new A.kc(s,null) +t.i2.a(B.aB) +s.b!==$&&A.c6() +s.b=r +s.c!==$&&A.c6() +s.c=B.aB +s.a1(0,a) +return r}, +kc:function kc(a,b){this.y$=a +this.x$=b}, +nZ:function nZ(){}, +l2:function l2(){}, +l3:function l3(){}, +fZ:function fZ(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.x$=d}, +l4:function l4(){}, +o_(a){var s=t.bO.a(new A.kh(a,B.bF,!0,!0,!1,!1,!1)),r=A.i([],t.eB) +s.T(0,new A.lk(new A.dg(t.f0.a(B.a.glc(r)),t.k0)).giE()) +return A.tc(r)}, +tc(a){var s=A.h1(t.I),r=new A.kf(s) +t.i2.a(B.hO) +s.b!==$&&A.c6() +s.b=r +s.c!==$&&A.c6() +s.c=B.hO +s.a1(0,a) +return r}, +kf:function kf(a){this.w$=a}, +o0:function o0(){}, +l5:function l5(){}, +wY(a,b,c,d){var s,r=A.h1(t.I),q=A.h1(t.G),p=new A.aG(d,a,r,q,null) +A.x(a).h("Z.T").a(p) +A.kp(a) +a.x$=p +s=t.i2 +s.a(B.aB) +q.b!==$&&A.c6() +q.b=p +q.c!==$&&A.c6() +q.c=B.aB +q.a1(0,b) +s.a(B.bz) +r.b!==$&&A.c6() +r.b=p +r.c!==$&&A.c6() +r.c=B.bz +r.a1(0,c) +return p}, +td(a,b,c,d){var s=A.te(a),r=A.h1(t.I),q=A.h1(t.G),p=new A.aG(d,s,r,q,null) +A.x(s).h("Z.T").a(p) +A.kp(s) +s.x$=p +s=t.i2 +s.a(B.aB) +q.b!==$&&A.c6() +q.b=p +q.c!==$&&A.c6() +q.c=B.aB +q.a1(0,b) +s.a(B.bz) +r.b!==$&&A.c6() +r.b=p +r.c!==$&&A.c6() +r.c=B.bz +r.a1(0,c) +return p}, +aG:function aG(a,b,c,d,e){var _=this +_.a=a +_.b=b +_.w$=c +_.y$=d +_.x$=e}, +o1:function o1(){}, +o2:function o2(){}, +l6:function l6(){}, +l7:function l7(){}, +l8:function l8(){}, +l9:function l9(){}, +E:function E(){}, +ll:function ll(){}, +lm:function lm(){}, +ln:function ln(){}, +lo:function lo(){}, +lp:function lp(){}, +lq:function lq(){}, +h4:function h4(a,b,c){this.c=a +this.a=b +this.x$=c}, +es:function es(a,b){this.a=a +this.x$=b}, +ka:function ka(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.$ti=d}, +eo:function eo(a,b){this.a=a +this.b=b}, +te(a){var s=B.b.al(a,":") +if(s>0)return new A.h3(B.b.t(a,0,s),B.b.ab(a,s+1),a,null) +else return new A.h5(a,null)}, +eq:function eq(){}, +lh:function lh(){}, +li:function li(){}, +lj:function lj(){}, +un(a,b){if(a==="*")if(b==null||b==="*")return new A.ps() +else return new A.pt(b) +else if(b==null)return new A.pu(a) +else if(b==="*")return new A.pv(a) +else return new A.pw(a,b)}, +ps:function ps(){}, +pt:function pt(a){this.a=a}, +pu:function pu(a){this.a=a}, +pv:function pv(a){this.a=a}, +pw:function pw(a,b){this.a=a +this.b=b}, +h1(a){return new A.h0(A.i([],a.h("y<0>")),a.h("h0<0>"))}, +h0:function h0(a,b){var _=this +_.c=_.b=$ +_.a=a +_.$ti=b}, +om:function om(a){this.a=a}, +h3:function h3(a,b,c,d){var _=this +_.b=a +_.c=b +_.d=c +_.x$=d}, +h5:function h5(a,b){this.b=a +this.x$=b}, +ks:function ks(){}, +kt:function kt(a,b){this.a=a +this.b=b}, +lu:function lu(){}, +nV:function nV(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +ok:function ok(){}, +ol:function ol(){}, +km:function km(){}, +kg:function kg(a){this.a=a}, +ld:function ld(a,b){this.a=a +this.b=b}, +lv:function lv(){}, +lk:function lk(a){this.a=a +this.b=null}, +p5:function p5(){}, +lw:function lw(){}, +a1:function a1(){}, +le:function le(){}, +lf:function lf(){}, +lg:function lg(){}, +c_:function c_(a,b,c,d,e){var _=this +_.e=a +_.at$=b +_.Q$=c +_.as$=d +_.z$=e}, +c0:function c0(a,b,c,d,e){var _=this +_.e=a +_.at$=b +_.Q$=c +_.as$=d +_.z$=e}, +bB:function bB(a,b,c,d,e){var _=this +_.e=a +_.at$=b +_.Q$=c +_.as$=d +_.z$=e}, +bC:function bC(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.at$=d +_.Q$=e +_.as$=f +_.z$=g}, +bM:function bM(a,b,c,d,e){var _=this +_.e=a +_.at$=b +_.Q$=c +_.as$=d +_.z$=e}, +la:function la(){}, +c2:function c2(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.at$=c +_.Q$=d +_.as$=e +_.z$=f}, +bd:function bd(a,b,c,d,e,f,g){var _=this +_.e=a +_.f=b +_.r=c +_.at$=d +_.Q$=e +_.as$=f +_.z$=g}, +ls:function ls(){}, +dI:function dI(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.r=$ +_.at$=c +_.Q$=d +_.as$=e +_.z$=f}, +kh:function kh(a,b,c,d,e,f,g){var _=this +_.a=a +_.b=b +_.c=c +_.d=d +_.e=e +_.f=f +_.r=g}, +ki:function ki(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +kj:function kj(a){this.a=a}, +o9:function o9(a){this.a=a}, +oj:function oj(){}, +o7:function o7(a){this.a=a}, +o3:function o3(){}, +o4:function o4(){}, +o6:function o6(){}, +o5:function o5(){}, +og:function og(){}, +oa:function oa(){}, +o8:function o8(){}, +ob:function ob(){}, +oh:function oh(){}, +oi:function oi(){}, +of:function of(){}, +od:function od(){}, +oc:function oc(){}, +oe:function oe(){}, +pz:function pz(){}, +dg:function dg(a,b){this.a=a +this.$ti=b}, +av:function av(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.z$=d}, +lb:function lb(){}, +lc:function lc(){}, +h_:function h_(){}, +dH:function dH(){}, +zk(){var s,r,q={},p=new A.aB($.an,t.cU) +p.e8(null) +q.a=p +s=A.p7(v.G.self) +q=new A.pL(q,new A.lV(B.bI,A.az(t.S,t.f))) +if(typeof q=="function")A.P(A.W("Attempting to rewrap a JS function.",null)) +r=function(a,b){return function(c){return a(b,c,arguments.length)}}(A.xR,q) +r[$.r3()]=q +s.onmessage=r}, +pL:function pL(a,b){this.a=a +this.b=b}, +pK:function pK(a,b){this.a=a +this.b=b}, +uB(a,b,c){A.uj(c,t.cZ,"T","max") +return Math.max(c.a(a),c.a(b))}, +uu(a,b){return(B.jc[(a^b)&255]^B.f.b5(a,8))>>>0}, +z0(a,b){var s,r,q,p,o=a.length,n=b.length +if(o!==n)return!1 +for(s=0;s")) +for(s=c.h("y<0>"),r=0;r<1;++r){q=a[r] +p=b.$1(q) +o=n.m(0,p) +if(o==null){o=A.i([],s) +n.k(0,p,o) +p=o}else p=o +J.vg(p,q)}return n}, +bI(a,b,c){var s,r +for(s=J.at(a);s.p();){r=s.gB() +if(b.$1(r))return r}return null}, +e3(a,b){var s=J.at(a.a) +if(new A.cF(s,a.b,a.$ti.h("cF<1>")).p())return s.gB() +return null}, +vG(a){var s,r,q,p,o,n,m,l,k,j,i,h=t.N,g=t.am,f=A.az(h,g),e=A.az(h,g) +g=t.ht +s=A.az(h,g) +r=A.az(h,g) +q=A.az(h,t.mg) +for(h=a.e.a.c.a,g=h.length,p=0;p":n=r?">":m +break +default:n=m}if(n!=null){if(q==null)q=new A.Y(B.b.t(a,0,p)) +q.a+=n}else if(q!=null)q.a+=o}if(q!=null){s=q.a +s=s.charCodeAt(0)==0?s:s}else s=a +return s}, +uo(){var s,r,q,p,o=null +try{o=A.qp()}catch(s){if(t.mA.b(A.bP(s))){r=$.pe +if(r!=null)return r +throw s}else throw s}if(J.N(o,$.u_)){r=$.pe +r.toString +return r}$.u_=o +if($.r4()===$.hF())r=$.pe=o.iy(".").j(0) +else{q=o.ff() +p=q.length-1 +r=$.pe=p===0?q:B.b.t(q,0,p)}return r}, +ux(a){var s +if(!(a>=65&&a<=90))s=a>=97&&a<=122 +else s=!0 +return s}, +ur(a,b){var s,r,q=null,p=a.length,o=b+2 +if(p=0&&b=0&&s=q)return A.c(s,-1) +p=s.pop() +for(q=p.gaN(),o=q.length,n=0;n")) +while(a instanceof A.u){if(b.a7(a))return c.h("n<0>").a(b.m(0,a)) +else if(!p.l(0,a))throw A.f(A.ce("Recursive references detected: "+p.j(0))) +a=a.$ti.h("n<1>").a(A.wv(a.a,a.b,null))}for(s=A.tv(p,p.r,p.$ti.c),r=s.$ti.c;s.p();){q=s.d +b.k(0,q==null?r.a(q):q,a)}return a}, +ui(a,b,c,d){var s=new A.ah(a),r=s.gbU(s),q=b?A.zn(a,!0,!1):new A.fM(r),p=A.uM(a,!1),o=b?" (case-insensitive)":"" +c='"'+p+'"'+o+" expected" +return A.bH(q,c,!1)}, +U(a){var s,r=a.length +A:{if(0===r){s=new A.cQ(a,t.pf) +break A}if(1===r){s=A.ui(a,!1,null,!1) +break A}s=A.zx(a,!1,null) +break A}return s}, +zv(a,b){var s=t.nq +s.a(a) +s.a(b) +return a}, +zw(a,b){var s=t.nq +s.a(a) +return s.a(b)}, +zu(a,b){var s=t.nq +s.a(a) +s.a(b) +return a.b<=b.b?b:a}, +zh(a){var s,r,q,p +if(a.gn(0)===0)return!0 +s=a.gbv(0) +for(r=A.bX(a,1,null,a.$ti.h("G.E")),q=r.$ti,r=new A.M(r,r.gn(0),q.h("M")),q=q.h("G.E");r.p();){p=r.d +if(!J.N(p==null?q.a(p):p,s))return!1}return!0}, +zs(a,b,c){var s=B.a.al(a,null) +if(s<0)throw A.f(A.W(A.k(a)+" contains no null elements.",null)) +B.a.k(a,s,b)}, +uJ(a,b,c){var s=B.a.al(a,b) +if(s<0)throw A.f(A.W(A.k(a)+" contains no elements matching "+b.j(0)+".",null)) +B.a.k(a,s,null)}, +yV(a,b){var s,r,q,p +for(s=new A.ah(a),r=t.gS,s=new A.M(s,s.gn(0),r.h("M")),r=r.h("C.E"),q=0;s.p();){p=s.d +if((p==null?r.a(p):p)===b)++q}return q}, +pA(a,b,c){var s,r,q +if(b.length===0)for(s=0;;){r=B.b.ap(a,"\n",s) +if(r===-1)return a.length-s>=c?s:null +if(r-s>=c)return s +s=r+1}r=B.b.al(a,b) +while(r!==-1){q=r===0?0:B.b.dO(a,"\n",r-1)+1 +if(c===r-q)return q +r=B.b.ap(a,b,r+1)}return null}, +b2(a,b,c){var s=A.un(b,c),r=a.iG(0,t.P),q=r.$ti +return new A.b_(r,q.h("A(h.E)").a(s),q.h("b_"))}, +x_(a){var s +for(s=a.x$;s!=null;s=s.gca())if(s instanceof A.aG)return s +return null}, +uA(a,b,c){var s,r,q,p,o +for(s=a;s!=null;s=s.gca())for(r=J.at(s.gaZ()),q=r.$ti.c;r.p();){p=r.d +if(p==null)p=q.a(p) +o=p.a +if(o.gik()==b&&o.ga_()===c)return p}return null}},B={} +var w=[A,J,B] +var $={} +A.q4.prototype={} +J.iS.prototype={ +v(a,b){return a===b}, +gq(a){return A.dy(a)}, +j(a){return"Instance of '"+A.jC(a)+"'"}, +ij(a,b){throw A.f(A.n6(a,t.bg.a(b)))}, +gaz(a){return A.ch(A.qK(this))}} +J.iV.prototype={ +j(a){return String(a)}, +gq(a){return a?519018:218159}, +gaz(a){return A.ch(t.k4)}, +$ia3:1, +$iA:1} +J.e4.prototype={ +v(a,b){return null==b}, +j(a){return"null"}, +gq(a){return 0}, +$ia3:1, +$iaK:1} +J.fk.prototype={$iap:1} +J.cW.prototype={ +gq(a){return 0}, +j(a){return String(a)}} +J.jA.prototype={} +J.dF.prototype={} +J.cu.prototype={ +j(a){var s=a[$.r3()] +if(s==null)return this.jI(a) +return"JavaScript function for "+J.ay(s)}, +$icq:1} +J.e6.prototype={ +gq(a){return 0}, +j(a){return String(a)}} +J.e7.prototype={ +gq(a){return 0}, +j(a){return String(a)}} +J.y.prototype={ +l(a,b){A.w(a).c.a(b) +a.$flags&1&&A.t(a,29) +a.push(b)}, +d2(a,b){a.$flags&1&&A.t(a,"removeAt",1) +if(b<0||b>=a.length)throw A.f(A.nu(b,null)) +return a.splice(b,1)[0]}, +bx(a,b,c){A.w(a).c.a(c) +a.$flags&1&&A.t(a,"insert",2) +if(b<0||b>a.length)throw A.f(A.nu(b,null)) +a.splice(b,0,c)}, +eY(a,b,c){var s,r +A.w(a).h("h<1>").a(c) +a.$flags&1&&A.t(a,"insertAll",2) +A.rS(b,0,a.length,"index") +if(!t.gt.b(c))c=J.vq(c) +s=J.b6(c) +a.length=a.length+s +r=b+s +this.bb(a,r,a.length,a,b) +this.bD(a,b,r,c)}, +d3(a){a.$flags&1&&A.t(a,"removeLast",1) +if(a.length===0)throw A.f(A.lz(a,-1)) +return a.pop()}, +W(a,b){var s +a.$flags&1&&A.t(a,"remove",1) +for(s=0;s").a(b) +a.$flags&1&&A.t(a,"addAll",2) +if(Array.isArray(b)){this.k0(a,b) +return}for(s=J.at(b);s.p();)a.push(s.gB())}, +k0(a,b){var s,r +t.dG.a(b) +s=b.length +if(s===0)return +if(a===b)throw A.f(A.ai(a)) +for(r=0;r").u(c).h("Q<1,2>"))}, +aq(a,b){var s,r=A.aE(a.length,"",!1,t.N) +for(s=0;s=0&&ba.length)throw A.f(A.af(b,0,a.length,"start",null)) +if(ca.length)throw A.f(A.af(c,b,a.length,"end",null)) +if(b===c)return A.i([],A.w(a)) +return A.i(a.slice(b,c),A.w(a))}, +gbv(a){if(a.length>0)return a[0] +throw A.f(A.bi())}, +gA(a){var s=a.length +if(s>0)return a[s-1] +throw A.f(A.bi())}, +fc(a,b,c){a.$flags&1&&A.t(a,18) +A.cw(b,c,a.length) +a.splice(b,c-b)}, +bb(a,b,c,d,e){var s,r,q,p,o +A.w(a).h("h<1>").a(d) +a.$flags&2&&A.t(a,5) +A.cw(b,c,a.length) +s=c-b +if(s===0)return +A.aF(e,"skipCount") +if(t.p.b(d)){r=d +q=e}else{r=J.lF(d,e).cz(0,!1) +q=0}p=J.ad(r) +if(q+s>p.gn(r))throw A.f(A.rt()) +if(q=0;--o)a[b+o]=p.m(r,q+o) +else for(o=0;o"))}, +bV(a,b){var s,r,q,p,o,n=A.w(a) +n.h("b(1,1)?").a(b) +a.$flags&2&&A.t(a,"sort") +s=a.length +if(s<2)return +if(b==null)b=J.ya() +if(s===2){r=a[0] +q=a[1] +n=b.$2(r,q) +if(typeof n!=="number")return n.b1() +if(n>0){a[0]=q +a[1]=r}return}p=0 +if(n.c.b(null))for(o=0;o0)this.kS(a,p)}, +kS(a,b){var s,r=a.length +for(;s=r-1,r>0;r=s)if(a[s]===null){a[s]=void 0;--b +if(b===0)break}}, +ap(a,b,c){var s,r=a.length +if(c>=r)return-1 +for(s=c;s"))}, +gq(a){return A.dy(a)}, +gn(a){return a.length}, +sn(a,b){a.$flags&1&&A.t(a,"set length","change the length of") +if(b<0)throw A.f(A.af(b,0,null,"newLength",null)) +if(b>a.length)A.w(a).c.a(null) +a.length=b}, +m(a,b){if(!(b>=0&&b=0&&b=a.length)return-1 +for(s=c;s=p){r.d=null +return!1}r.d=q[s] +r.c=s+1 +return!0}, +$iL:1} +J.e5.prototype={ +ai(a,b){var s +A.tW(b) +if(ab)return 1 +else if(a===b){if(a===0){s=this.gf_(b) +if(this.gf_(a)===s)return 0 +if(this.gf_(a))return-1 +return 1}return 0}else if(isNaN(a)){if(isNaN(b))return 0 +return 1}else return-1}, +gf_(a){return a===0?1/a<0:a<0}, +cw(a){var s +if(a>=-2147483648&&a<=2147483647)return a|0 +if(isFinite(a)){s=a<0?Math.ceil(a):Math.floor(a) +return s+0}throw A.f(A.ac(""+a+".toInt()"))}, +m0(a,b,c){if(B.f.ai(b,c)>0)throw A.f(A.dO(b)) +if(this.ai(a,b)<0)return b +if(this.ai(a,c)>0)return c +return a}, +d6(a,b){var s,r,q,p,o +if(b<2||b>36)throw A.f(A.af(b,2,36,"radix",null)) +s=a.toString(b) +r=s.length +q=r-1 +if(!(q>=0))return A.c(s,q) +if(s.charCodeAt(q)!==41)return s +p=/^([\da-z]+)(?:\.([\da-z]+))?\(e\+(\d+)\)$/.exec(s) +if(p==null)A.P(A.ac("Unexpected toString result: "+s)) +r=p.length +if(1>=r)return A.c(p,1) +s=p[1] +if(3>=r)return A.c(p,3) +o=+p[3] +r=p[2] +if(r!=null){s+=r +o-=r.length}return s+B.b.b2("0",o)}, +j(a){if(a===0&&1/a<0)return"-0.0" +else return""+a}, +gq(a){var s,r,q,p,o=a|0 +if(a===o)return o&536870911 +s=Math.abs(a) +r=Math.log(s)/0.6931471805599453|0 +q=Math.pow(2,r) +p=s<1?s/q:q/s +return((p*9007199254740992|0)+(p*3542243181176521|0))*599197+r*1259&536870911}, +cB(a,b){return a+b}, +bl(a,b){var s=a%b +if(s===0)return 0 +if(s>0)return s +return s+b}, +fL(a,b){if((a|0)===a)if(b>=1)return a/b|0 +return this.hs(a,b)}, +av(a,b){return(a|0)===a?a/b|0:this.hs(a,b)}, +hs(a,b){var s=a/b +if(s>=-2147483648&&s<=2147483647)return s|0 +if(s>0){if(s!==1/0)return Math.floor(s)}else if(s>-1/0)return Math.ceil(s) +throw A.f(A.ac("Result of truncating division is "+A.k(s)+": "+A.k(a)+" ~/ "+b))}, +aW(a,b){if(b<0)throw A.f(A.dO(b)) +return b>31?0:a<>>0}, +bp(a,b){return b>31?0:a<>>0}, +b5(a,b){var s +if(a>0)s=this.dt(a,b) +else{s=b>31?31:b +s=a>>s>>>0}return s}, +cI(a,b){if(0>b)throw A.f(A.dO(b)) +return this.dt(a,b)}, +dt(a,b){return b>31?0:a>>>b}, +b1(a,b){return a>b}, +gaz(a){return A.ch(t.cZ)}, +$ia6:1, +$iV:1, +$ib5:1} +J.fi.prototype={ +ghR(a){var s,r=a<0?-a-1:a,q=r +for(s=32;q>=4294967296;){q=this.av(q,4294967296) +s+=32}return s-Math.clz32(q)}, +gaz(a){return A.ch(t.S)}, +$ia3:1, +$ib:1} +J.iW.prototype={ +gaz(a){return A.ch(t.dx)}, +$ia3:1} +J.ct.prototype={ +dC(a,b,c){var s=b.length +if(c>s)throw A.f(A.af(c,0,s,null,null)) +return new A.kU(b,a,c)}, +dB(a,b){return this.dC(a,b,0)}, +f0(a,b,c){var s,r,q,p,o=null +if(c<0||c>b.length)throw A.f(A.af(c,0,b.length,o,o)) +s=a.length +r=b.length +if(c+s>r)return o +for(q=0;q=0&&pr)return!1 +return b===this.ab(a,r-s)}, +d4(a,b,c){A.rS(0,0,a.length,"startIndex") +return A.zC(a,b,c,0)}, +d9(a,b){var s +if(typeof b=="string")return A.i(a.split(b),t.s) +else{if(b instanceof A.cV){s=b.e +s=!(s==null?b.e=b.k9():s)}else s=!1 +if(s)return A.i(a.split(b.b),t.s) +else return this.kh(a,b)}}, +bR(a,b,c,d){var s=A.cw(b,c,a.length) +return A.r2(a,b,s,d)}, +kh(a,b){var s,r,q,p,o,n,m=A.i([],t.s) +for(s=J.lE(b,a),s=s.gF(s),r=0,q=1;s.p();){p=s.gB() +o=p.gS() +n=p.gV() +q=n-o +if(q===0&&r===o)continue +B.a.l(m,this.t(a,r,o)) +r=n}if(r0)B.a.l(m,this.ab(a,r)) +return m}, +aa(a,b,c){var s +t.m4.a(b) +if(c<0||c>a.length)throw A.f(A.af(c,0,a.length,null,null)) +if(typeof b=="string"){s=c+b.length +if(s>a.length)return!1 +return b===a.substring(c,s)}return J.vn(b,a,c)!=null}, +U(a,b){return this.aa(a,b,0)}, +t(a,b,c){return a.substring(b,A.cw(b,c,a.length))}, +ab(a,b){return this.t(a,b,null)}, +ba(a){var s,r,q,p=a.trim(),o=p.length +if(o===0)return p +if(0>=o)return A.c(p,0) +if(p.charCodeAt(0)===133){s=J.ry(p,1) +if(s===o)return""}else s=0 +r=o-1 +if(!(r>=0))return A.c(p,r) +q=p.charCodeAt(r)===133?J.w_(p,r):o +if(s===0&&q===o)return p +return p.substring(s,q)}, +og(a){var s=a.trimStart(),r=s.length +if(r===0)return s +if(0>=r)return A.c(s,0) +if(s.charCodeAt(0)!==133)return s +return s.substring(J.ry(s,1))}, +b2(a,b){var s,r +if(0>=b)return"" +if(b===1||a.length===0)return a +if(b!==b>>>0)throw A.f(B.ir) +for(s=a,r="";;){if((b&1)===1)r=s+r +b=b>>>1 +if(b===0)break +s+=s}return r}, +nC(a,b,c){var s=b-a.length +if(s<=0)return a +return this.b2(c,s)+a}, +nD(a,b){var s=b-a.length +if(s<=0)return a +return a+this.b2(" ",s)}, +ap(a,b,c){var s +if(c<0||c>a.length)throw A.f(A.af(c,0,a.length,null,null)) +s=a.indexOf(b,c) +return s}, +al(a,b){return this.ap(a,b,0)}, +dO(a,b,c){var s,r,q +if(c==null)c=a.length +else if(c<0||c>a.length)throw A.f(A.af(c,0,a.length,null,null)) +if(typeof b=="string"){s=b.length +r=a.length +if(c+s>r)c=r-s +return a.lastIndexOf(b,c)}for(s=J.pC(b),q=c;q>=0;--q)if(s.f0(b,a,q)!=null)return q +return-1}, +cU(a,b){return this.dO(a,b,null)}, +C(a,b){return A.zy(a,b,0)}, +ai(a,b){var s +A.q(b) +if(a===b)s=0 +else s=a>6}r=r+((r&67108863)<<3)&536870911 +r^=r>>11 +return r+((r&16383)<<15)&536870911}, +gaz(a){return A.ch(t.N)}, +gn(a){return a.length}, +$iaU:1, +$ia3:1, +$ia6:1, +$idx:1, +$ie:1} +A.eu.prototype={ +gF(a){return new A.eN(J.at(this.gbq()),A.x(this).h("eN<1,2>"))}, +gn(a){return J.b6(this.gbq())}, +gN(a){return J.r9(this.gbq())}, +gaP(a){return J.vl(this.gbq())}, +aX(a,b){var s=A.x(this) +return A.eM(J.lF(this.gbq(),b),s.c,s.y[1])}, +bk(a,b){var s=A.x(this) +return A.eM(J.rc(this.gbq(),b),s.c,s.y[1])}, +ag(a,b){return A.x(this).y[1].a(J.hG(this.gbq(),b))}, +C(a,b){return J.vj(this.gbq(),b)}, +j(a){return J.ay(this.gbq())}} +A.eN.prototype={ +p(){return this.a.p()}, +gB(){return this.$ti.y[1].a(this.a.gB())}, +$iL:1} +A.de.prototype={ +gbq(){return this.a}} +A.hb.prototype={$iz:1} +A.df.prototype={ +c3(a,b,c){return new A.df(this.a,this.$ti.h("@<1,2>").u(b).u(c).h("df<1,2,3,4>"))}, +a7(a){return this.a.a7(a)}, +m(a,b){return this.$ti.h("4?").a(this.a.m(0,b))}, +k(a,b,c){var s=this.$ti +s.y[2].a(b) +s.y[3].a(c) +this.a.k(0,s.c.a(b),s.y[1].a(c))}, +T(a,b){this.a.T(0,new A.lK(this,this.$ti.h("~(3,4)").a(b)))}, +gaR(){var s=this.$ti +return A.eM(this.a.gaR(),s.c,s.y[2])}, +gn(a){var s=this.a +return s.gn(s)}, +gN(a){var s=this.a +return s.gN(s)}} +A.lK.prototype={ +$2(a,b){var s=this.a.$ti +s.c.a(a) +s.y[1].a(b) +this.b.$2(s.y[2].a(a),s.y[3].a(b))}, +$S(){return this.a.$ti.h("~(1,2)")}} +A.e8.prototype={ +j(a){return"LateInitializationError: "+this.a}} +A.jF.prototype={ +j(a){return"ReachabilityError: "+this.a}} +A.ah.prototype={ +gn(a){return this.a.length}, +m(a,b){var s=this.a +if(!(b>=0&&b"))}, +gN(a){return this.gn(this)===0}, +gbv(a){if(this.gn(this)===0)throw A.f(A.bi()) +return this.ag(0,0)}, +C(a,b){var s,r=this,q=r.gn(r) +for(s=0;ss)throw A.f(A.af(r,0,s,"start",null))}}, +gkm(){var s=J.b6(this.a),r=this.c +if(r==null||r>s)return s +return r}, +gl1(){var s=J.b6(this.a),r=this.b +if(r>s)return s +return r}, +gn(a){var s,r=J.b6(this.a),q=this.b +if(q>=r)return 0 +s=this.c +if(s==null||s>=r)return r-q +return s-q}, +ag(a,b){var s=this,r=s.gl1()+b +if(b<0||r>=s.gkm())throw A.f(A.iM(b,s.gn(0),s,null,"index")) +return J.hG(s.a,r)}, +aX(a,b){var s,r,q=this +A.aF(b,"count") +s=q.b+b +r=q.c +if(r!=null&&s>=r)return new A.eW(q.$ti.h("eW<1>")) +return A.bX(q.a,s,r,q.$ti.c)}, +bk(a,b){var s,r,q,p=this +A.aF(b,"count") +s=p.c +r=p.b +if(s==null)return A.bX(p.a,r,B.f.cB(r,b),p.$ti.c) +else{q=B.f.cB(r,b) +if(s=o){r.d=null +return!1}r.d=p.ag(q,s);++r.c +return!0}, +$iL:1} +A.ba.prototype={ +gF(a){return new A.du(J.at(this.a),this.b,A.x(this).h("du<1,2>"))}, +gn(a){return J.b6(this.a)}, +gN(a){return J.r9(this.a)}, +ag(a,b){return this.b.$1(J.hG(this.a,b))}} +A.eU.prototype={$iz:1} +A.du.prototype={ +p(){var s=this,r=s.b +if(r.p()){s.a=s.c.$1(r.gB()) +return!0}s.a=null +return!1}, +gB(){var s=this.a +return s==null?this.$ti.y[1].a(s):s}, +$iL:1} +A.Q.prototype={ +gn(a){return J.b6(this.a)}, +ag(a,b){return this.b.$1(J.hG(this.a,b))}} +A.b_.prototype={ +gF(a){return new A.cF(J.at(this.a),this.b,this.$ti.h("cF<1>"))}} +A.cF.prototype={ +p(){var s,r +for(s=this.a,r=this.b;s.p();)if(r.$1(s.gB()))return!0 +return!1}, +gB(){return this.a.gB()}, +$iL:1} +A.dn.prototype={ +gF(a){return new A.fd(J.at(this.a),this.b,B.cK,this.$ti.h("fd<1,2>"))}} +A.fd.prototype={ +gB(){var s=this.d +return s==null?this.$ti.y[1].a(s):s}, +p(){var s,r,q=this,p=q.c +if(p==null)return!1 +for(s=q.a,r=q.b;!p.p();){q.d=null +if(s.p()){q.c=null +p=J.at(r.$1(s.gB())) +q.c=p}else return!1}q.d=q.c.gB() +return!0}, +$iL:1} +A.dE.prototype={ +gF(a){var s=this.a +return new A.fT(s.gF(s),this.b,A.x(this).h("fT<1>"))}} +A.eV.prototype={ +gn(a){var s=this.a,r=s.gn(s) +s=this.b +if(B.f.b1(r,s))return s +return r}, +$iz:1} +A.fT.prototype={ +p(){if(--this.b>=0)return this.a.p() +this.b=-1 +return!1}, +gB(){if(this.b<0){this.$ti.c.a(null) +return null}return this.a.gB()}, +$iL:1} +A.cx.prototype={ +aX(a,b){A.hR(b,"count",t.S) +A.aF(b,"count") +return new A.cx(this.a,this.b+b,A.x(this).h("cx<1>"))}, +gF(a){var s=this.a +return new A.fO(s.gF(s),this.b,A.x(this).h("fO<1>"))}} +A.dZ.prototype={ +gn(a){var s=this.a,r=s.gn(s)-this.b +if(r>=0)return r +return 0}, +aX(a,b){A.hR(b,"count",t.S) +A.aF(b,"count") +return new A.dZ(this.a,this.b+b,this.$ti)}, +$iz:1} +A.fO.prototype={ +p(){var s,r +for(s=this.a,r=0;r"))}} +A.bZ.prototype={ +p(){var s,r +for(s=this.a,r=this.$ti.c;s.p();)if(r.b(s.gB()))return!0 +return!1}, +gB(){return this.$ti.c.a(this.a.gB())}, +$iL:1} +A.ak.prototype={ +sn(a,b){throw A.f(A.ac("Cannot change the length of a fixed-length list"))}, +l(a,b){A.b3(a).h("ak.E").a(b) +throw A.f(A.ac("Cannot add to a fixed-length list"))}} +A.bL.prototype={ +k(a,b,c){A.x(this).h("bL.E").a(c) +throw A.f(A.ac("Cannot modify an unmodifiable list"))}, +sn(a,b){throw A.f(A.ac("Cannot change the length of an unmodifiable list"))}, +l(a,b){A.x(this).h("bL.E").a(b) +throw A.f(A.ac("Cannot add to an unmodifiable list"))}, +bV(a,b){A.x(this).h("b(bL.E,bL.E)?").a(b) +throw A.f(A.ac("Cannot modify an unmodifiable list"))}} +A.em.prototype={} +A.X.prototype={ +gn(a){return J.b6(this.a)}, +ag(a,b){var s=this.a,r=J.ad(s) +return r.ag(s,r.gn(s)-1-b)}} +A.cf.prototype={ +gq(a){var s=this._hashCode +if(s!=null)return s +s=664597*B.b.gq(this.a)&536870911 +this._hashCode=s +return s}, +j(a){return'Symbol("'+this.a+'")'}, +v(a,b){if(b==null)return!1 +return b instanceof A.cf&&this.a===b.a}, +$iel:1} +A.l.prototype={$r:"+(1,2)",$s:1} +A.hl.prototype={$r:"+(1,2,3)",$s:2} +A.hm.prototype={$r:"+(1,2,3,4)",$s:3} +A.hn.prototype={$r:"+(1,2,3,4,5)",$s:4} +A.ho.prototype={$r:"+(1,2,3,4,5,6,7,8)",$s:5} +A.eP.prototype={} +A.dW.prototype={ +c3(a,b,c){var s=A.x(this) +return A.rD(this,s.c,s.y[1],b,c)}, +gN(a){return this.gn(this)===0}, +j(a){return A.q9(this)}, +k(a,b,c){var s=A.x(this) +s.c.a(b) +s.y[1].a(c) +A.vF()}, +$id:1} +A.r.prototype={ +gn(a){return this.b.length}, +ghc(){var s=this.$keys +if(s==null){s=Object.keys(this.a) +this.$keys=s}return s}, +a7(a){if(typeof a!="string")return!1 +if("__proto__"===a)return!1 +return this.a.hasOwnProperty(a)}, +m(a,b){if(!this.a7(b))return null +return this.b[this.a[b]]}, +T(a,b){var s,r,q,p +this.$ti.h("~(1,2)").a(b) +s=this.ghc() +r=this.b +for(q=s.length,p=0;p"))}} +A.he.prototype={ +gn(a){return this.a.length}, +gN(a){return 0===this.a.length}, +gaP(a){return 0!==this.a.length}, +gF(a){var s=this.a +return new A.cK(s,s.length,this.$ti.h("cK<1>"))}} +A.cK.prototype={ +gB(){var s=this.d +return s==null?this.$ti.c.a(s):s}, +p(){var s=this,r=s.c +if(r>=s.b){s.d=null +return!1}s.d=s.a[r] +s.c=r+1 +return!0}, +$iL:1} +A.a.prototype={ +c_(){var s=this,r=s.$map +if(r==null){r=new A.dp(s.$ti.h("dp<1,2>")) +A.us(s.a,r) +s.$map=r}return r}, +a7(a){return this.c_().a7(a)}, +m(a,b){return this.c_().m(0,b)}, +T(a,b){this.$ti.h("~(1,2)").a(b) +this.c_().T(0,b)}, +gaR(){var s=this.c_() +return new A.aV(s,A.x(s).h("aV<1>"))}, +gn(a){return this.c_().a}} +A.dX.prototype={} +A.b8.prototype={ +gn(a){return this.b}, +gN(a){return this.b===0}, +gaP(a){return this.b!==0}, +gF(a){var s,r=this,q=r.$keys +if(q==null){q=Object.keys(r.a) +r.$keys=q}s=q +return new A.cK(s,s.length,r.$ti.h("cK<1>"))}, +C(a,b){if(typeof b!="string")return!1 +if("__proto__"===b)return!1 +return this.a.hasOwnProperty(b)}} +A.aP.prototype={ +gn(a){return this.a.length}, +gN(a){return this.a.length===0}, +gaP(a){return this.a.length!==0}, +gF(a){var s=this.a +return new A.cK(s,s.length,this.$ti.h("cK<1>"))}, +c_(){var s,r,q,p,o=this,n=o.$map +if(n==null){n=new A.dp(o.$ti.h("dp<1,1>")) +for(s=o.a,r=s.length,q=0;q")}} +A.e0.prototype={ +$2(a,b){return this.a.$1$2(a,b,this.$ti.y[0])}, +$S(){return A.zg(A.pi(this.a),this.$ti)}} +A.fj.prototype={ +gnt(){var s=this.a +if(s instanceof A.cf)return s +return this.a=new A.cf(A.q(s))}, +gnJ(){var s,r,q,p,o,n=this +if(n.c===1)return B.h +s=n.d +r=J.ad(s) +q=r.gn(s)-J.b6(n.e)-n.f +if(q===0)return B.h +p=[] +for(o=0;o>>0}, +j(a){return"Closure '"+this.$_name+"' of "+("Instance of '"+A.jC(this.a)+"'")}} +A.jK.prototype={ +j(a){return"RuntimeError: "+this.a}} +A.oW.prototype={} +A.bx.prototype={ +gn(a){return this.a}, +gN(a){return this.a===0}, +gaR(){return new A.aV(this,A.x(this).h("aV<1>"))}, +a7(a){var s,r +if(typeof a=="string"){s=this.b +if(s==null)return!1 +return s[a]!=null}else if(typeof a=="number"&&(a&0x3fffffff)===a){r=this.c +if(r==null)return!1 +return r[a]!=null}else return this.nd(a)}, +nd(a){var s=this.d +if(s==null)return!1 +return this.cT(s[this.cS(a)],a)>=0}, +a1(a,b){A.x(this).h("d<1,2>").a(b).T(0,new A.mK(this))}, +m(a,b){var s,r,q,p,o=null +if(typeof b=="string"){s=this.b +if(s==null)return o +r=s[b] +q=r==null?o:r.b +return q}else if(typeof b=="number"&&(b&0x3fffffff)===b){p=this.c +if(p==null)return o +r=p[b] +q=r==null?o:r.b +return q}else return this.ne(b)}, +ne(a){var s,r,q=this.d +if(q==null)return null +s=q[this.cS(a)] +r=this.cT(s,a) +if(r<0)return null +return s[r].b}, +k(a,b,c){var s,r,q=this,p=A.x(q) +p.c.a(b) +p.y[1].a(c) +if(typeof b=="string"){s=q.b +q.fP(s==null?q.b=q.ep():s,b,c)}else if(typeof b=="number"&&(b&0x3fffffff)===b){r=q.c +q.fP(r==null?q.c=q.ep():r,b,c)}else q.ng(b,c)}, +ng(a,b){var s,r,q,p,o=this,n=A.x(o) +n.c.a(a) +n.y[1].a(b) +s=o.d +if(s==null)s=o.d=o.ep() +r=o.cS(a) +q=s[r] +if(q==null)s[r]=[o.eq(a,b)] +else{p=o.cT(q,a) +if(p>=0)q[p].b=b +else q.push(o.eq(a,b))}}, +f7(a,b){var s,r,q=this,p=A.x(q) +p.c.a(a) +p.h("2()").a(b) +if(q.a7(a)){s=q.m(0,a) +return s==null?p.y[1].a(s):s}r=b.$0() +q.k(0,a,r) +return r}, +W(a,b){var s=this +if(typeof b=="string")return s.ho(s.b,b) +else if(typeof b=="number"&&(b&0x3fffffff)===b)return s.ho(s.c,b) +else return s.nf(b)}, +nf(a){var s,r,q,p,o=this,n=o.d +if(n==null)return null +s=o.cS(a) +r=n[s] +q=o.cT(r,a) +if(q<0)return null +p=r.splice(q,1)[0] +o.hy(p) +if(r.length===0)delete n[s] +return p.b}, +bc(a){var s=this +if(s.a>0){s.b=s.c=s.d=s.e=s.f=null +s.a=0 +s.eo()}}, +T(a,b){var s,r,q=this +A.x(q).h("~(1,2)").a(b) +s=q.e +r=q.r +while(s!=null){b.$2(s.a,s.b) +if(r!==q.r)throw A.f(A.ai(q)) +s=s.c}}, +fP(a,b,c){var s,r=A.x(this) +r.c.a(b) +r.y[1].a(c) +s=a[b] +if(s==null)a[b]=this.eq(b,c) +else s.b=c}, +ho(a,b){var s +if(a==null)return null +s=a[b] +if(s==null)return null +this.hy(s) +delete a[b] +return s.b}, +eo(){this.r=this.r+1&1073741823}, +eq(a,b){var s=this,r=A.x(s),q=new A.mM(r.c.a(a),r.y[1].a(b)) +if(s.e==null)s.e=s.f=q +else{r=s.f +r.toString +q.d=r +s.f=r.c=q}++s.a +s.eo() +return q}, +hy(a){var s=this,r=a.d,q=a.c +if(r==null)s.e=q +else r.c=q +if(q==null)s.f=r +else q.d=r;--s.a +s.eo()}, +cS(a){return J.B(a)&1073741823}, +cT(a,b){var s,r +if(a==null)return-1 +s=a.length +for(r=0;r"]=s +delete s[""] +return s}, +$imL:1} +A.mK.prototype={ +$2(a,b){var s=this.a,r=A.x(s) +s.k(0,r.c.a(a),r.y[1].a(b))}, +$S(){return A.x(this.a).h("~(1,2)")}} +A.mM.prototype={} +A.aV.prototype={ +gn(a){return this.a.a}, +gN(a){return this.a.a===0}, +gF(a){var s=this.a +return new A.cv(s,s.r,s.e,this.$ti.h("cv<1>"))}, +C(a,b){return this.a.a7(b)}} +A.cv.prototype={ +gB(){return this.d}, +p(){var s,r=this,q=r.a +if(r.b!==q.r)throw A.f(A.ai(q)) +s=r.c +if(s==null){r.d=null +return!1}else{r.d=s.a +r.c=s.c +return!0}}, +$iL:1} +A.fo.prototype={ +gn(a){return this.a.a}, +gN(a){return this.a.a===0}, +gF(a){var s=this.a +return new A.dr(s,s.r,s.e,this.$ti.h("dr<1>"))}} +A.dr.prototype={ +gB(){return this.d}, +p(){var s,r=this,q=r.a +if(r.b!==q.r)throw A.f(A.ai(q)) +s=r.c +if(s==null){r.d=null +return!1}else{r.d=s.b +r.c=s.c +return!0}}, +$iL:1} +A.dq.prototype={ +gn(a){return this.a.a}, +gN(a){return this.a.a===0}, +gF(a){var s=this.a +return new A.fn(s,s.r,s.e,this.$ti.h("fn<1,2>"))}} +A.fn.prototype={ +gB(){var s=this.d +s.toString +return s}, +p(){var s,r=this,q=r.a +if(r.b!==q.r)throw A.f(A.ai(q)) +s=r.c +if(s==null){r.d=null +return!1}else{r.d=new A.b0(s.a,s.b,r.$ti.h("b0<1,2>")) +r.c=s.c +return!0}}, +$iL:1} +A.dp.prototype={ +cS(a){return A.yL(a)&1073741823}, +cT(a,b){var s,r +if(a==null)return-1 +s=a.length +for(r=0;r0;){--q;--s +B.a.k(j,q,r[s])}}return A.rC(j,k)}} +A.ez.prototype={ +di(){return[this.a,this.b]}, +v(a,b){if(b==null)return!1 +return b instanceof A.ez&&this.$s===b.$s&&J.N(this.a,b.a)&&J.N(this.b,b.b)}, +gq(a){return A.aX(this.$s,this.a,this.b,B.u)}} +A.eA.prototype={ +di(){return[this.a,this.b,this.c]}, +v(a,b){var s=this +if(b==null)return!1 +return b instanceof A.eA&&s.$s===b.$s&&J.N(s.a,b.a)&&J.N(s.b,b.b)&&J.N(s.c,b.c)}, +gq(a){var s=this +return A.aX(s.$s,s.a,s.b,s.c)}} +A.d7.prototype={ +di(){return this.a}, +v(a,b){if(b==null)return!1 +return b instanceof A.d7&&this.$s===b.$s&&A.xp(this.a,b.a)}, +gq(a){return A.aX(this.$s,A.wk(this.a),B.u,B.u)}} +A.cV.prototype={ +j(a){return"RegExp/"+this.a+"/"+this.b.flags}, +ghh(){var s=this,r=s.c +if(r!=null)return r +r=s.b +return s.c=A.q3(s.a,r.multiline,!r.ignoreCase,r.unicode,r.dotAll,"g")}, +gkB(){var s=this,r=s.d +if(r!=null)return r +r=s.b +return s.d=A.q3(s.a,r.multiline,!r.ignoreCase,r.unicode,r.dotAll,"y")}, +k9(){var s,r=this.a +if(!B.b.C(r,"("))return!1 +s=this.b.unicode?"u":"" +return new RegExp("(?:)|"+r,s).exec("").length>1}, +dC(a,b,c){var s=b.length +if(c>s)throw A.f(A.af(c,0,s,null,null)) +return new A.kw(this,b,c)}, +dB(a,b){return this.dC(0,b,0)}, +h6(a,b){var s,r=this.ghh() +if(r==null)r=A.cg(r) +r.lastIndex=b +s=r.exec(a) +if(s==null)return null +return new A.hg(s)}, +kn(a,b){var s,r=this.gkB() +if(r==null)r=A.cg(r) +r.lastIndex=b +s=r.exec(a) +if(s==null)return null +return new A.hg(s)}, +f0(a,b,c){if(c<0||c>b.length)throw A.f(A.af(c,0,b.length,null,null)) +return this.kn(b,c)}, +$idx:1, +$iqg:1} +A.hg.prototype={ +gS(){return this.b.index}, +gV(){var s=this.b +return s.index+s[0].length}, +d8(a){var s=this.b +if(!(a=0&&q=55296&&q<=56319){if(!(n>=0))return A.c(l,n) +s=l.charCodeAt(n) +s=s>=56320&&s<=57343}}}o=(s?o+1:o)+1}m.c=o +return!0}}m.b=m.d=null +return!1}, +$iL:1} +A.fS.prototype={ +gV(){return this.a+this.c.length}, +d8(a){if(a!==0)throw A.f(A.nu(a,null)) +return this.c}, +$icc:1, +gS(){return this.a}} +A.kU.prototype={ +gF(a){return new A.kV(this.a,this.b,this.c)}} +A.kV.prototype={ +p(){var s,r,q=this,p=q.c,o=q.b,n=o.length,m=q.a,l=m.length +if(p+n>l){q.d=null +return!1}s=m.indexOf(o,p) +if(s<0){q.c=l+1 +q.d=null +return!1}r=s+n +q.d=new A.fS(s,o) +q.c=r===q.c?r+1:r +return!0}, +gB(){var s=this.d +s.toString +return s}, +$iL:1} +A.kB.prototype={ +aY(){var s=this.b +if(s===this)throw A.f(A.q6(this.a)) +return s}} +A.dv.prototype={ +gaz(a){return B.Mw}, +hO(a,b,c){var s +A.pb(a,b,c) +s=new Uint8Array(a,b,c) +return s}, +dD(a,b,c){A.pb(a,b,c) +return c==null?new DataView(a,b):new DataView(a,b,c)}, +hN(a){return this.dD(a,0,null)}, +$ia3:1, +$idv:1} +A.fu.prototype={ +ga9(a){if(((a.$flags|0)&2)!==0)return new A.p0(a.buffer) +else return a.buffer}, +kw(a,b,c,d){var s=A.af(b,0,c,d,null) +throw A.f(s)}, +fW(a,b,c,d){if(b>>>0!==b||b>c)this.kw(a,b,c,d)}} +A.p0.prototype={ +hO(a,b,c){var s=A.w9(this.a,b,c) +s.$flags=3 +return s}, +dD(a,b,c){var s=A.w6(this.a,b,c) +s.$flags=3 +return s}, +hN(a){return this.dD(0,0,null)}} +A.j7.prototype={ +gaz(a){return B.Mx}, +$ia3:1} +A.aW.prototype={ +gn(a){return a.length}, +kW(a,b,c,d,e){var s,r,q=a.length +this.fW(a,b,q,"start") +this.fW(a,c,q,"end") +if(b>c)throw A.f(A.af(b,0,c,null,null)) +s=c-b +if(e<0)throw A.f(A.W(e,null)) +r=d.length +if(r-e").b(a))s.fV(a) +else s.fZ(a)}}, +eG(a,b){var s=this.a +if(this.b)s.ec(new A.bG(a,b)) +else s.e9(new A.bG(a,b))}} +A.p9.prototype={ +$1(a){return this.a.$2(0,a)}, +$S:16} +A.pa.prototype={ +$2(a,b){this.a.$2(1,new A.fc(a,t.F.a(b)))}, +$S:46} +A.ph.prototype={ +$2(a,b){this.a(A.ax(a),b)}, +$S:54} +A.bG.prototype={ +j(a){return A.k(this.a)}, +$ia0:1, +gcf(){return this.b}} +A.kC.prototype={ +eG(a,b){var s=this.a +if((s.a&30)!==0)throw A.f(A.ce("Future already completed")) +s.e9(A.y9(a,b))}, +i_(a){return this.eG(a,null)}} +A.h8.prototype={ +eF(a){var s,r=this.$ti +r.h("1/?").a(a) +s=this.a +if((s.a&30)!==0)throw A.f(A.ce("Future already completed")) +s.e8(r.h("1/").a(a))}} +A.dJ.prototype={ +nr(a){if((this.c&15)!==6)return!0 +return this.b.b.fd(t.iW.a(this.d),a.a,t.k4,t.K)}, +n6(a){var s,r=this,q=r.e,p=null,o=t.z,n=t.K,m=a.a,l=r.b.b +if(t.ng.b(q))p=l.oa(q,m,a.b,o,n,t.F) +else p=l.fd(t.mq.a(q),m,o,n) +try{o=r.$ti.h("2/").a(p) +return o}catch(s){if(t.do.b(A.bP(s))){if((r.c&1)!==0)throw A.f(A.W("The error handler of Future.then must return a value of the returned future's type","onError")) +throw A.f(A.W("The error handler of Future.catchError must return a value of the future's type","onError"))}else throw s}}} +A.aB.prototype={ +fe(a,b,c){var s,r,q,p=this.$ti +p.u(c).h("1/(2)").a(a) +s=$.an +if(s===B.a3){if(b!=null&&!t.ng.b(b)&&!t.mq.b(b))throw A.f(A.q_(b,"onError",u.w))}else{c.h("@<0/>").u(p.c).h("1(2)").a(a) +if(b!=null)b=A.yr(b,s)}r=new A.aB(s,c.h("aB<0>")) +q=b==null?1:3 +this.e7(new A.dJ(r,q,a,b,p.h("@<1>").u(c).h("dJ<1,2>"))) +return r}, +of(a,b){return this.fe(a,null,b)}, +hv(a,b,c){var s,r=this.$ti +r.u(c).h("1/(2)").a(a) +s=new A.aB($.an,c.h("aB<0>")) +this.e7(new A.dJ(s,19,a,b,r.h("@<1>").u(c).h("dJ<1,2>"))) +return s}, +kV(a){this.a=this.a&1|16 +this.c=a}, +dg(a){this.a=a.a&30|this.a&1 +this.c=a.c}, +e7(a){var s,r=this,q=r.a +if(q<=3){a.a=t.np.a(r.c) +r.c=a}else{if((q&4)!==0){s=t.j_.a(r.c) +if((s.a&24)===0){s.e7(a) +return}r.dg(s)}A.ly(null,null,r.b,t.U.a(new A.oF(r,a)))}}, +hm(a){var s,r,q,p,o,n,m=this,l={} +l.a=a +if(a==null)return +s=m.a +if(s<=3){r=t.np.a(m.c) +m.c=a +if(r!=null){q=a.a +for(p=a;q!=null;p=q,q=o)o=q.a +p.a=r}}else{if((s&4)!==0){n=t.j_.a(m.c) +if((n.a&24)===0){n.hm(a) +return}m.dg(n)}l.a=m.dr(a) +A.ly(null,null,m.b,t.U.a(new A.oJ(l,m)))}}, +dq(){var s=t.np.a(this.c) +this.c=null +return this.dr(s)}, +dr(a){var s,r,q +for(s=a,r=null;s!=null;r=s,s=q){q=s.a +s.a=r}return r}, +fZ(a){var s,r=this +r.$ti.c.a(a) +s=r.dq() +r.a=8 +r.c=a +A.ex(r,s)}, +k7(a){var s,r,q=this +if((a.a&16)!==0){s=q.b===a.b +s=!(s||s)}else s=!1 +if(s)return +r=q.dq() +q.dg(a) +A.ex(q,r)}, +ec(a){var s=this.dq() +this.kV(a) +A.ex(this,s)}, +e8(a){var s=this.$ti +s.h("1/").a(a) +if(s.h("cr<1>").b(a)){this.fV(a) +return}this.k5(a)}, +k5(a){var s=this +s.$ti.c.a(a) +s.a^=2 +A.ly(null,null,s.b,t.U.a(new A.oH(s,a)))}, +fV(a){A.qz(this.$ti.h("cr<1>").a(a),this,!1) +return}, +e9(a){this.a^=2 +A.ly(null,null,this.b,t.U.a(new A.oG(this,a)))}, +$icr:1} +A.oF.prototype={ +$0(){A.ex(this.a,this.b)}, +$S:1} +A.oJ.prototype={ +$0(){A.ex(this.b,this.a.a)}, +$S:1} +A.oI.prototype={ +$0(){A.qz(this.a.a,this.b,!0)}, +$S:1} +A.oH.prototype={ +$0(){this.a.fZ(this.b)}, +$S:1} +A.oG.prototype={ +$0(){this.a.ec(this.b)}, +$S:1} +A.oM.prototype={ +$0(){var s,r,q,p,o,n,m,l,k=this,j=null +try{q=k.a.a +j=q.b.b.o9(t.mY.a(q.d),t.z)}catch(p){s=A.bP(p) +r=A.eJ(p) +if(k.c&&t.B.a(k.b.a.c).a===s){q=k.a +q.c=t.B.a(k.b.a.c)}else{q=s +o=r +if(o==null)o=A.q0(q) +n=k.a +n.c=new A.bG(q,o) +q=n}q.b=!0 +return}if(j instanceof A.aB&&(j.a&24)!==0){if((j.a&16)!==0){q=k.a +q.c=t.B.a(j.c) +q.b=!0}return}if(j instanceof A.aB){m=k.b.a +l=new A.aB(m.b,m.$ti) +j.fe(new A.oN(l,m),new A.oO(l),t.H) +q=k.a +q.c=l +q.b=!1}}, +$S:1} +A.oN.prototype={ +$1(a){this.a.k7(this.b)}, +$S:28} +A.oO.prototype={ +$2(a,b){A.cg(a) +t.F.a(b) +this.a.ec(new A.bG(a,b))}, +$S:59} +A.oL.prototype={ +$0(){var s,r,q,p,o,n,m,l +try{q=this.a +p=q.a +o=p.$ti +n=o.c +m=n.a(this.b) +q.c=p.b.b.fd(o.h("2/(1)").a(p.d),m,o.h("2/"),n)}catch(l){s=A.bP(l) +r=A.eJ(l) +q=s +p=r +if(p==null)p=A.q0(q) +o=this.a +o.c=new A.bG(q,p) +o.b=!0}}, +$S:1} +A.oK.prototype={ +$0(){var s,r,q,p,o,n,m,l=this +try{s=t.B.a(l.a.a.c) +p=l.b +if(p.a.nr(s)&&p.a.e!=null){p.c=p.a.n6(s) +p.b=!1}}catch(o){r=A.bP(o) +q=A.eJ(o) +p=t.B.a(l.a.a.c) +if(p.a===r){n=l.b +n.c=p +p=n}else{p=r +n=q +if(n==null)n=A.q0(p) +m=l.b +m.c=new A.bG(p,n) +p=m}p.b=!0}}, +$S:1} +A.ky.prototype={} +A.kT.prototype={} +A.hz.prototype={$itj:1} +A.kS.prototype={ +ob(a){var s,r,q +t.U.a(a) +try{if(B.a3===$.an){a.$0() +return}A.u9(null,null,this,a,t.H)}catch(q){s=A.bP(q) +r=A.eJ(q) +A.qO(A.cg(s),t.F.a(r))}}, +lO(a){return new A.oX(this,t.U.a(a))}, +o9(a,b){b.h("0()").a(a) +if($.an===B.a3)return a.$0() +return A.u9(null,null,this,a,b)}, +fd(a,b,c,d){c.h("@<0>").u(d).h("1(2)").a(a) +d.a(b) +if($.an===B.a3)return a.$1(b) +return A.yt(null,null,this,a,b,c,d)}, +oa(a,b,c,d,e,f){d.h("@<0>").u(e).u(f).h("1(2,3)").a(a) +e.a(b) +f.a(c) +if($.an===B.a3)return a.$2(b,c) +return A.ys(null,null,this,a,b,c,d,e,f)}, +it(a,b,c,d){return b.h("@<0>").u(c).u(d).h("1(2,3)").a(a)}} +A.oX.prototype={ +$0(){return this.a.ob(this.b)}, +$S:1} +A.pf.prototype={ +$0(){A.vL(this.a,this.b)}, +$S:1} +A.cJ.prototype={ +gn(a){return this.a}, +gN(a){return this.a===0}, +gaR(){return new A.hc(this,A.x(this).h("hc<1>"))}, +a7(a){var s,r +if(typeof a=="string"&&a!=="__proto__"){s=this.b +return s==null?!1:s[a]!=null}else if(typeof a=="number"&&(a&1073741823)===a){r=this.c +return r==null?!1:r[a]!=null}else return this.h0(a)}, +h0(a){var s=this.d +if(s==null)return!1 +return this.bG(this.h9(s,a),a)>=0}, +m(a,b){var s,r,q +if(typeof b=="string"&&b!=="__proto__"){s=this.b +r=s==null?null:A.tt(s,b) +return r}else if(typeof b=="number"&&(b&1073741823)===b){q=this.c +r=q==null?null:A.tt(q,b) +return r}else return this.h8(b)}, +h8(a){var s,r,q=this.d +if(q==null)return null +s=this.h9(q,a) +r=this.bG(s,a) +return r<0?null:s[r+1]}, +k(a,b,c){var s,r,q=this,p=A.x(q) +p.c.a(b) +p.y[1].a(c) +if(typeof b=="string"&&b!=="__proto__"){s=q.b +q.fY(s==null?q.b=A.qA():s,b,c)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +q.fY(r==null?q.c=A.qA():r,b,c)}else q.hp(b,c)}, +hp(a,b){var s,r,q,p,o=this,n=A.x(o) +n.c.a(a) +n.y[1].a(b) +s=o.d +if(s==null)s=o.d=A.qA() +r=o.bZ(a) +q=s[r] +if(q==null){A.qB(s,r,[a,b]);++o.a +o.e=null}else{p=o.bG(q,a) +if(p>=0)q[p+1]=b +else{q.push(a,b);++o.a +o.e=null}}}, +T(a,b){var s,r,q,p,o,n,m=this,l=A.x(m) +l.h("~(1,2)").a(b) +s=m.h_() +for(r=s.length,q=l.c,l=l.y[1],p=0;p"))}, +C(a,b){return this.a.a7(b)}} +A.hd.prototype={ +gB(){var s=this.d +return s==null?this.$ti.c.a(s):s}, +p(){var s=this,r=s.b,q=s.c,p=s.a +if(r!==p.e)throw A.f(A.ai(p)) +else if(q>=r.length){s.d=null +return!1}else{s.d=r[q] +s.c=q+1 +return!0}}, +$iL:1} +A.cL.prototype={ +gF(a){var s=this,r=new A.dL(s,s.r,A.x(s).h("dL<1>")) +r.c=s.e +return r}, +gn(a){return this.a}, +gN(a){return this.a===0}, +gaP(a){return this.a!==0}, +C(a,b){var s,r +if(typeof b=="string"&&b!=="__proto__"){s=this.b +if(s==null)return!1 +return t.nF.a(s[b])!=null}else if(typeof b=="number"&&(b&1073741823)===b){r=this.c +if(r==null)return!1 +return t.nF.a(r[b])!=null}else return this.kb(b)}, +kb(a){var s=this.d +if(s==null)return!1 +return this.bG(s[this.bZ(a)],a)>=0}, +l(a,b){var s,r,q=this +A.x(q).c.a(b) +if(typeof b=="string"&&b!=="__proto__"){s=q.b +return q.fX(s==null?q.b=A.qC():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c +return q.fX(r==null?q.c=A.qC():r,b)}else return q.de(b)}, +de(a){var s,r,q,p=this +A.x(p).c.a(a) +s=p.d +if(s==null)s=p.d=A.qC() +r=p.bZ(a) +q=s[r] +if(q==null)s[r]=[p.eb(a)] +else{if(p.bG(q,a)>=0)return!1 +q.push(p.eb(a))}return!0}, +fX(a,b){A.x(this).c.a(b) +if(t.nF.a(a[b])!=null)return!1 +a[b]=this.eb(b) +return!0}, +eb(a){var s=this,r=new A.kP(A.x(s).c.a(a)) +if(s.e==null)s.e=s.f=r +else s.f=s.f.b=r;++s.a +s.r=s.r+1&1073741823 +return r}, +bZ(a){return J.B(a)&1073741823}, +bG(a,b){var s,r +if(a==null)return-1 +s=a.length +for(r=0;r"))}, +ag(a,b){return this.m(a,b)}, +T(a,b){var s,r +A.b3(a).h("~(C.E)").a(b) +s=this.gn(a) +for(r=0;r1)throw A.f(A.ru()) +return this.m(a,0)}, +C(a,b){var s,r=this.gn(a) +for(s=0;s").u(c).h("Q<1,2>"))}, +aX(a,b){return A.bX(a,b,null,A.b3(a).h("C.E"))}, +bk(a,b){return A.bX(a,0,A.dP(b,"count",t.S),A.b3(a).h("C.E"))}, +l(a,b){var s +A.b3(a).h("C.E").a(b) +s=this.gn(a) +this.sn(a,s+1) +this.k(a,s,b)}, +bc(a){this.sn(a,0)}, +d3(a){var s,r=this +if(r.gn(a)===0)throw A.f(A.bi()) +s=r.m(a,r.gn(a)-1) +r.sn(a,r.gn(a)-1) +return s}, +bV(a,b){var s,r=A.b3(a) +r.h("b(C.E,C.E)?").a(b) +s=b==null?A.yK():b +A.jM(a,0,this.gn(a)-1,s,r.h("C.E"))}, +c5(a,b,c,d){var s +A.b3(a).h("C.E?").a(d) +A.cw(b,c,this.gn(a)) +for(s=b;s").a(d) +A.cw(b,c,this.gn(a)) +s=c-b +if(s===0)return +A.aF(e,"skipCount") +if(t.p.b(d)){r=e +q=d}else{q=J.lF(d,e).cz(0,!1) +r=0}p=J.ad(q) +if(r+s>p.gn(q))throw A.f(A.rt()) +if(r=0;--o)this.k(a,b+o,p.m(q,r+o)) +else for(o=0;o").u(c).h("dG<1,2>"))}} +A.fp.prototype={ +gF(a){var s=this +return new A.hf(s,s.c,s.d,s.b,s.$ti.h("hf<1>"))}, +gN(a){return this.b===this.c}, +gn(a){return(this.c-this.b&this.a.length-1)>>>0}, +ag(a,b){var s,r,q,p=this +A.vS(b,p.gn(0),p,null,null) +s=p.a +r=s.length +q=(p.b+b&r-1)>>>0 +if(!(q>=0&&q>>0)B.a.k(s.a,r,null) +s.b=s.c=0;++s.d}}, +j(a){return A.iT(this,"{","}")}, +iu(){var s,r,q=this,p=q.b +if(p===q.c)throw A.f(A.bi());++q.d +s=q.a +if(!(p>>0 +return r}, +de(a){var s,r,q,p,o=this,n=o.$ti +n.c.a(a) +B.a.k(o.a,o.c,a) +s=o.c +r=o.a.length +s=(s+1&r-1)>>>0 +o.c=s +if(o.b===s){q=A.aE(r*2,null,!1,n.h("1?")) +n=o.a +s=o.b +p=n.length-s +B.a.bb(q,0,p,n,s) +B.a.bb(q,p,p+o.b,o.a,0) +o.b=0 +o.c=o.a.length +o.a=q}++o.d}, +$iwH:1} +A.hf.prototype={ +gB(){var s=this.e +return s==null?this.$ti.c.a(s):s}, +p(){var s,r,q=this,p=q.a +if(q.c!==p.d)A.P(A.ai(p)) +s=q.d +if(s===q.b){q.e=null +return!1}p=p.a +r=p.length +if(!(s>>0 +return!0}, +$iL:1} +A.aY.prototype={ +gN(a){return this.gn(this)===0}, +gaP(a){return this.gn(this)!==0}, +j(a){return A.iT(this,"{","}")}, +aq(a,b){var s,r,q=this.gF(this) +if(!q.p())return"" +s=J.ay(q.gB()) +if(!q.p())return s +if(b.length===0){r=s +do r+=A.k(q.gB()) +while(q.p())}else{r=s +do r=r+b+A.k(q.gB()) +while(q.p())}return r.charCodeAt(0)==0?r:r}, +bk(a,b){return A.rZ(this,b,A.x(this).h("aY.E"))}, +aX(a,b){return A.rX(this,b,A.x(this).h("aY.E"))}, +ag(a,b){var s,r +A.aF(b,"index") +s=this.gF(this) +for(r=b;s.p();){if(r===0)return s.gB();--r}throw A.f(A.iM(b,b-r,this,null,"index"))}, +$iz:1, +$ih:1, +$ibk:1} +A.hp.prototype={} +A.eC.prototype={} +A.p3.prototype={ +$0(){var s,r +try{s=new TextDecoder("utf-8",{fatal:true}) +return s}catch(r){}return null}, +$S:25} +A.p2.prototype={ +$0(){var s,r +try{s=new TextDecoder("utf-8",{fatal:false}) +return s}catch(r){}return null}, +$S:25} +A.hS.prototype={ +b0(a){var s +t.L.a(a) +s=B.i_.bL(a) +return s}} +A.kY.prototype={ +bL(a){var s,r,q,p,o +t.L.a(a) +s=J.ad(a) +r=A.cw(0,null,s.gn(a)) +for(q=~this.b,p=0;p>>0!==0){if(!this.a)throw A.f(A.aD("Invalid value in input: "+o,null,null)) +return this.kc(a,0,r)}}return A.aA(a,0,r)}, +kc(a,b,c){var s,r,q,p,o +t.L.a(a) +for(s=~this.b,r=J.ad(a),q=b,p="";q>>0!==0?65533:o)}return p.charCodeAt(0)==0?p:p}} +A.hT.prototype={} +A.eL.prototype={ +geO(){return B.ie}, +nA(a3,a4,a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=u.A,a1="Invalid base64 encoding length ",a2=a3.length +a5=A.cw(a4,a5,a2) +s=$.v3() +for(r=s.length,q=a4,p=q,o=null,n=-1,m=-1,l=0;q=0&&e=0){if(!(d<64))return A.c(a0,d) +e=a0.charCodeAt(d) +if(e===j)continue +j=e}else{if(d===-1){if(n<0){g=o==null?null:o.a.length +if(g==null)g=0 +n=g+(q-p) +m=q}++l +if(j===61)continue}j=e}if(d!==-2){if(o==null){o=new A.Y("") +g=o}else g=o +g.a+=B.b.t(a3,p,q) +c=A.a4(j) +g.a+=c +p=k +continue}}throw A.f(A.aD("Invalid base64 data",a3,q))}if(o!=null){a2=B.b.t(a3,p,a5) +a2=o.a+=a2 +r=a2.length +if(n>=0)A.re(a3,m,a5,n,l,r) +else{b=B.f.bl(r-1,4)+1 +if(b===1)throw A.f(A.aD(a1,a3,a5)) +while(b<4){a2+="=" +o.a=a2;++b}}a2=o.a +return B.b.bR(a3,a4,a5,a2.charCodeAt(0)==0?a2:a2)}a=a5-a4 +if(n>=0)A.re(a3,m,a5,n,l,a) +else{b=B.f.bl(a,4) +if(b===1)throw A.f(A.aD(a1,a3,a5)) +if(b>1)a3=B.b.bR(a3,a5,a5,b===2?"==":"=")}return a3}} +A.hX.prototype={ +bL(a){var s +t.L.a(a) +s=J.ad(a) +if(s.gN(a))return"" +s=new A.oy(u.A).mS(a,0,s.gn(a),!0) +s.toString +return A.aA(s,0,null)}} +A.oy.prototype={ +mS(a,b,c,d){var s,r,q,p,o +t.L.a(a) +s=this.a +r=(s&3)+(c-b) +q=B.f.av(r,3) +p=q*4 +if(r-q*3>0)p+=4 +o=new Uint8Array(p) +this.a=A.x7(this.b,a,b,c,!0,o,0,s) +if(p>0)return o +return null}} +A.bt.prototype={} +A.cl.prototype={} +A.ic.prototype={} +A.fl.prototype={ +j(a){var s=A.dm(this.a) +return(this.b!=null?"Converting object to an encodable object failed:":"Converting object did not return an encodable object:")+" "+s}} +A.iZ.prototype={ +j(a){return"Cyclic error in JSON stringify"}} +A.iY.prototype={ +mR(a,b){var s=A.xi(a,this.geO().b,null) +return s}, +geO(){return B.iR}} +A.j_.prototype={} +A.oS.prototype={ +iM(a){var s,r,q,p,o,n,m=a.length +for(s=this.c,r=0,q=0;q92){if(p>=55296){o=p&64512 +if(o===55296){n=q+1 +n=!(n=0&&(a.charCodeAt(o)&64512)===55296)}else o=!1 +else o=!0 +if(o){if(q>r)s.a+=B.b.t(a,r,q) +r=q+1 +o=A.a4(92) +s.a+=o +o=A.a4(117) +s.a+=o +o=A.a4(100) +s.a+=o +o=p>>>8&15 +o=A.a4(o<10?48+o:87+o) +s.a+=o +o=p>>>4&15 +o=A.a4(o<10?48+o:87+o) +s.a+=o +o=p&15 +o=A.a4(o<10?48+o:87+o) +s.a+=o}}continue}if(p<32){if(q>r)s.a+=B.b.t(a,r,q) +r=q+1 +o=A.a4(92) +s.a+=o +switch(p){case 8:o=A.a4(98) +s.a+=o +break +case 9:o=A.a4(116) +s.a+=o +break +case 10:o=A.a4(110) +s.a+=o +break +case 12:o=A.a4(102) +s.a+=o +break +case 13:o=A.a4(114) +s.a+=o +break +default:o=A.a4(117) +s.a+=o +o=A.a4(48) +s.a=(s.a+=o)+o +o=p>>>4&15 +o=A.a4(o<10?48+o:87+o) +s.a+=o +o=p&15 +o=A.a4(o<10?48+o:87+o) +s.a+=o +break}}else if(p===34||p===92){if(q>r)s.a+=B.b.t(a,r,q) +r=q+1 +o=A.a4(92) +s.a+=o +o=A.a4(p) +s.a+=o}}if(r===0)s.a+=a +else if(r=q.length)return A.c(q,-1) +q.pop()}catch(p){r=A.bP(p) +q=A.rz(a,r,o.ghk()) +throw A.f(q)}}, +iL(a){var s,r,q=this +if(typeof a=="number"){if(!isFinite(a))return!1 +q.c.a+=B.cV.j(a) +return!0}else if(a===!0){q.c.a+="true" +return!0}else if(a===!1){q.c.a+="false" +return!0}else if(a==null){q.c.a+="null" +return!0}else if(typeof a=="string"){s=q.c +s.a+='"' +q.iM(a) +s.a+='"' +return!0}else if(t.p.b(a)){q.ea(a) +q.ow(a) +s=q.a +if(0>=s.length)return A.c(s,-1) +s.pop() +return!0}else if(t.av.b(a)){q.ea(a) +r=q.ox(a) +s=q.a +if(0>=s.length)return A.c(s,-1) +s.pop() +return r}else return!1}, +ow(a){var s,r,q=this.c +q.a+="[" +s=J.ad(a) +if(s.gaP(a)){this.dY(s.m(a,0)) +for(r=1;r=15){o=l.a +n=A.xI(o,q,b,s) +if(n!=null){if(!o)return n +if(n.indexOf("\ufffd")<0)return n}}n=l.ee(q,b,s,!0) +o=l.b +if((o&1)!==0){m=A.xK(o) +l.b=0 +throw A.f(A.aD(m,a,p+l.c))}return n}, +ee(a,b,c,d){var s,r,q=this +if(c-b>1000){s=B.f.av(b+c,2) +r=q.ee(a,b,s,!1) +if((q.b&1)!==0)return r +return r+q.ee(a,s,c,d)}return q.mj(a,b,c,d)}, +mj(a,b,a0,a1){var s,r,q,p,o,n,m,l,k=this,j="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHIHHHJEEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBKCCCCCCCCCCCCDCLONNNMEEEEEEEEEEE",i=" \x000:XECCCCCN:lDb \x000:XECCCCCNvlDb \x000:XECCCCCN:lDb AAAAA\x00\x00\x00\x00\x00AAAAA00000AAAAA:::::AAAAAGG000AAAAA00KKKAAAAAG::::AAAAA:IIIIAAAAA000\x800AAAAA\x00\x00\x00\x00 AAAAA",h=65533,g=k.b,f=k.c,e=new A.Y(""),d=b+1,c=a.length +if(!(b>=0&&b=0&&s<256))return A.c(j,s) +q=j.charCodeAt(s)&31 +f=g<=32?s&61694>>>q:(s&63|f<<6)>>>0 +p=g+q +if(!(p>=0&&p<144))return A.c(i,p) +g=i.charCodeAt(p) +if(g===0){p=A.a4(f) +e.a+=p +if(d===a0)break A +break}else if((g&1)!==0){if(r)switch(g){case 69:case 67:p=A.a4(h) +e.a+=p +break +case 65:p=A.a4(h) +e.a+=p;--d +break +default:p=A.a4(h) +e.a=(e.a+=p)+p +break}else{k.b=g +k.c=d-1 +return""}g=0}if(d===a0)break A +o=d+1 +if(!(d>=0&&d=0&&d=0&&o=128){n=m-1 +o=m +break}o=m}if(n-d<20)for(l=d;l32)if(r){c=A.a4(h) +e.a+=c}else{k.b=77 +k.c=a0 +return""}k.b=g +k.c=f +c=e.a +return c.charCodeAt(0)==0?c:c}} +A.aq.prototype={ +bT(a){var s,r,q=this,p=q.c +if(p===0)return q +s=!q.a +r=q.b +p=A.b1(p,r) +return new A.aq(p===0?!1:s,r,p)}, +kj(a){var s,r,q,p,o,n,m,l=this.c +if(l===0)return $.c8() +s=l+a +r=this.b +q=new Uint16Array(s) +for(p=l-1,o=r.length;p>=0;--p){n=p+a +if(!(p=0&&n=0&&o=0&&r=0&&qj?k:j,h=this.b,g=a.b,f=new Uint16Array(i) +if(k=0&&o=0)return q.bY(b,r) +return b.bY(q,!r)}, +e6(a,b){var s,r,q=this,p=q.c +if(p===0)return b.bT(0) +s=b.c +if(s===0)return q +r=q.a +if(r!==b.a)return q.dd(b,r) +if(A.oz(q.b,p,b.b,s)>=0)return q.bY(b,r) +return b.bY(q,!r)}, +b2(a,b){var s,r,q,p,o,n,m,l=this.c,k=b.c +if(l===0||k===0)return $.c8() +s=l+k +r=this.b +q=b.b +p=new Uint16Array(s) +for(o=q.length,n=0;n0?p.bT(0):p}, +kQ(a){var s,r,q,p=this +if(p.c0)q=q.e5(0,$.qu.aY()) +return p.a&&q.c>0?q.bT(0):q}, +h5(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=this,b=c.c +if(b===$.tm&&a.c===$.to&&c.b===$.tl&&a.b===$.tn)return +s=a.b +r=a.c +q=r-1 +if(!(q>=0&&q0){o=new Uint16Array(r+5) +n=A.tk(s,r,p,o) +m=new Uint16Array(b+5) +l=A.tk(c.b,b,p,m)}else{m=A.qv(c.b,0,b,b+2) +n=r +o=s +l=b}q=n-1 +if(!(q>=0&&q=0){q&2&&A.t(m) +if(!(l>=0&&l=0&&l=0&&n0;){d=A.xa(k,m,e);--j +A.tq(d,f,0,m,j,n) +if(!(e>=0&&e=0;--s){if(!(s=m.length)return A.c(m,0) +return B.f.j(-m[0])}m=n.b +if(0>=m.length)return A.c(m,0) +return B.f.j(m[0])}s=A.i([],t.s) +m=n.a +r=m?n.bT(0):n +while(r.c>1){q=$.v4() +if(q.c===0)A.P(B.ii) +p=r.kQ(q).j(0) +B.a.l(s,p) +o=p.length +if(o===1)B.a.l(s,"000") +if(o===2)B.a.l(s,"00") +if(o===3)B.a.l(s,"0") +r=r.ki(q)}q=r.b +if(0>=q.length)return A.c(q,0) +B.a.l(s,B.f.j(q[0])) +if(m)B.a.l(s,"-") +return new A.X(s,t.hF).aQ(0)}, +$ii_:1, +$ia6:1} +A.oA.prototype={ +$2(a,b){a=a+b&536870911 +a=a+((a&524287)<<10)&536870911 +return a^a>>>6}, +$S:87} +A.oB.prototype={ +$1(a){a=a+((a&67108863)<<3)&536870911 +a^=a>>>11 +return a+((a&16383)<<15)&536870911}, +$S:26} +A.n7.prototype={ +$2(a,b){var s,r,q +t.bR.a(a) +s=this.b +r=this.a +q=(s.a+=r.a)+a.a +s.a=q +s.a=q+": " +q=A.dm(b) +s.a+=q +r.a=", "}, +$S:42} +A.dh.prototype={ +v(a,b){if(b==null)return!1 +return b instanceof A.dh&&this.a===b.a&&this.b===b.b&&this.c===b.c}, +gq(a){return A.aX(this.a,this.b,B.u,B.u)}, +ai(a,b){var s +t.cs.a(b) +s=B.f.ai(this.a,b.a) +if(s!==0)return s +return B.f.ai(this.b,b.b)}, +j(a){var s=this,r=A.vH(A.wE(s)),q=A.i8(A.wC(s)),p=A.i8(A.wy(s)),o=A.i8(A.wz(s)),n=A.i8(A.wB(s)),m=A.i8(A.wD(s)),l=A.rn(A.wA(s)),k=s.b,j=k===0?"":A.rn(k) +k=r+"-"+q +if(s.c)return k+"-"+p+" "+o+":"+n+":"+m+"."+l+j+"Z" +else return k+"-"+p+" "+o+":"+n+":"+m+"."+l+j}, +$ia6:1} +A.oE.prototype={ +j(a){return this.bn()}} +A.a0.prototype={ +gcf(){return A.wx(this)}} +A.hU.prototype={ +j(a){var s=this.a +if(s!=null)return"Assertion failed: "+A.dm(s) +return"Assertion failed"}} +A.cC.prototype={} +A.bR.prototype={ +gei(){return"Invalid argument"+(!this.a?"(s)":"")}, +geh(){return""}, +j(a){var s=this,r=s.c,q=r==null?"":" ("+r+")",p=s.d,o=p==null?"":": "+A.k(p),n=s.gei()+q+o +if(!s.a)return n +return n+s.geh()+": "+A.dm(s.geZ())}, +geZ(){return this.b}} +A.ef.prototype={ +geZ(){return A.tX(this.b)}, +gei(){return"RangeError"}, +geh(){var s,r=this.e,q=this.f +if(r==null)s=q!=null?": Not less than or equal to "+A.k(q):"" +else if(q==null)s=": Not greater than or equal to "+A.k(r) +else if(q>r)s=": Not in inclusive range "+A.k(r)+".."+A.k(q) +else s=qe.length +else s=!1 +if(s)f=null +if(f==null){if(e.length>78)e=B.b.t(e,0,75)+"..." +return g+"\n"+e}for(r=e.length,q=1,p=0,o=!1,n=0;n1?g+(" (at line "+q+", character "+(f-p+1)+")\n"):g+(" (at character "+(f+1)+")\n") +for(n=f;n=0))return A.c(e,n) +m=e.charCodeAt(n) +if(m===10||m===13){r=n +break}}l="" +if(r-p>78){k="..." +if(f-p<75){j=p+75 +i=p}else{if(r-f<75){i=r-75 +j=r +k=""}else{i=f-36 +j=f+36}l="..."}}else{j=r +i=p +k=""}return g+l+B.b.t(e,i,j)+k+"\n"+B.b.b2(" ",f-i+l.length)+"^\n"}else return f!=null?g+(" (at offset "+A.k(f)+")"):g}, +$iaj:1} +A.iR.prototype={ +gcf(){return null}, +j(a){return"IntegerDivisionByZeroException"}, +$ia0:1, +$iaj:1} +A.h.prototype={ +c8(a,b,c){var s=A.x(this) +return A.rE(this,s.u(c).h("1(h.E)").a(b),s.h("h.E"),c)}, +os(a,b){var s=A.x(this) +return new A.b_(this,s.h("A(h.E)").a(b),s.h("b_"))}, +iG(a,b){return new A.O(this,b.h("O<0>"))}, +C(a,b){var s +for(s=this.gF(this);s.p();)if(J.N(s.gB(),b))return!0 +return!1}, +T(a,b){var s +A.x(this).h("~(h.E)").a(b) +for(s=this.gF(this);s.p();)b.$1(s.gB())}, +cQ(a,b,c,d){var s,r +d.a(b) +A.x(this).u(d).h("1(1,h.E)").a(c) +for(s=this.gF(this),r=b;s.p();)r=c.$2(r,s.gB()) +return r}, +aq(a,b){var s,r,q=this.gF(this) +if(!q.p())return"" +s=J.ay(q.gB()) +if(!q.p())return s +if(b.length===0){r=s +do r+=J.ay(q.gB()) +while(q.p())}else{r=s +do r=r+b+J.ay(q.gB()) +while(q.p())}return r.charCodeAt(0)==0?r:r}, +aQ(a){return this.aq(0,"")}, +aH(a,b){var s +A.x(this).h("A(h.E)").a(b) +for(s=this.gF(this);s.p();)if(b.$1(s.gB()))return!0 +return!1}, +cz(a,b){var s=A.x(this).h("h.E") +if(b)s=A.a7(this,s) +else{s=A.a7(this,s) +s.$flags=1 +s=s}return s}, +iB(a){return this.cz(0,!0)}, +gn(a){var s,r=this.gF(this) +for(s=0;r.p();)++s +return s}, +gN(a){return!this.gF(this).p()}, +gaP(a){return!this.gN(this)}, +bk(a,b){return A.rZ(this,b,A.x(this).h("h.E"))}, +aX(a,b){return A.rX(this,b,A.x(this).h("h.E"))}, +gbU(a){var s,r=this.gF(this) +if(!r.p())throw A.f(A.bi()) +s=r.gB() +if(r.p())throw A.f(A.ru()) +return s}, +cq(a,b,c){var s,r +A.x(this).h("A(h.E)").a(b) +for(s=this.gF(this);s.p();){r=s.gB() +if(b.$1(r))return r}throw A.f(A.bi())}, +cp(a,b){return this.cq(0,b,null)}, +ag(a,b){var s,r +A.aF(b,"index") +s=this.gF(this) +for(r=b;s.p();){if(r===0)return s.gB();--r}throw A.f(A.iM(b,b-r,this,null,"index"))}, +j(a){return A.vW(this,"(",")")}} +A.b0.prototype={ +j(a){return"MapEntry("+A.k(this.a)+": "+A.k(this.b)+")"}} +A.aK.prototype={ +gq(a){return A.p.prototype.gq.call(this,0)}, +j(a){return"null"}} +A.p.prototype={$ip:1, +v(a,b){return this===b}, +gq(a){return A.dy(this)}, +j(a){return"Instance of '"+A.jC(this)+"'"}, +ij(a,b){throw A.f(A.n6(this,t.bg.a(b)))}, +gaz(a){return A.cN(this)}, +toString(){return this.j(this)}} +A.kW.prototype={ +j(a){return""}, +$id1:1} +A.bV.prototype={ +gF(a){return new A.jJ(this.a)}} +A.jJ.prototype={ +gB(){return this.d}, +p(){var s,r,q,p=this,o=p.b=p.c,n=p.a,m=n.length +if(o===m){p.d=-1 +return!1}if(!(o=r)return A.c(s,0) +r=s.charCodeAt(0)===47}else r=!1 +if(r)s=B.b.ab(s,1) +q=s.length===0?B.j6:A.rC(new A.Q(A.i(s.split("/"),t.s),t.f6.a(A.yS()),t.iZ),t.N) +p.x!==$&&A.dc() +o=p.x=q}return o}, +gq(a){var s,r=this,q=r.y +if(q===$){s=B.b.gq(r.ght()) +r.y!==$&&A.dc() +r.y=s +q=s}return q}, +gfg(){return this.b}, +gc6(){var s=this.c +if(s==null)return"" +if(B.b.U(s,"[")&&!B.b.aa(s,"v",1))return B.b.t(s,1,s.length-1) +return s}, +gcZ(){var s=this.d +return s==null?A.tH(this.a):s}, +gd_(){var s=this.f +return s==null?"":s}, +gcR(){var s=this.r +return s==null?"":s}, +ni(a){var s=this.a +if(a.length!==s.length)return!1 +return A.xS(a,s,0)>=0}, +iw(a){var s,r,q,p,o,n,m,l=this +a=A.qG(a,0,a.length) +s=a==="file" +r=l.b +q=l.d +if(a!==l.a)q=A.p1(q,a) +p=l.c +if(!(p!=null))p=r.length!==0||q!=null||s?"":null +o=l.e +if(!s)n=p!=null&&o.length!==0 +else n=!0 +if(n&&!B.b.U(o,"/"))o="/"+o +m=o +return A.hx(a,r,p,q,m,l.f,l.r)}, +hg(a,b){var s,r,q,p,o,n,m,l,k +for(s=0,r=0;B.b.aa(b,"../",r);){r+=3;++s}q=B.b.cU(a,"/") +p=a.length +for(;;){if(!(q>0&&s>0))break +o=B.b.dO(a,"/",q-1) +if(o<0)break +n=q-o +m=n!==2 +l=!1 +if(!m||n===3){k=o+1 +if(!(k0){k=B.b.t(n,0,l) +n=a.geS()?k+A.dN(a.gaT()):k+A.dN(h.hg(B.b.ab(n,k.length),a.gaT()))}else if(a.geS())n=A.dN(a.gaT()) +else if(n.length===0)if(p==null)n=s.length===0?a.gaT():A.dN(a.gaT()) +else n=A.dN("/"+a.gaT()) +else{j=h.hg(n,a.gaT()) +r=s.length===0 +if(!r||p!=null||B.b.U(n,"/"))n=A.dN(j) +else n=A.qI(j,!r||p!=null)}m=a.gdL()?a.gd_():null}}}i=a.gdK()?a.gcR():null +return A.hx(s,q,p,o,n,m,i)}, +geV(){return this.a.length!==0}, +geT(){return this.c!=null}, +gdL(){return this.f!=null}, +gdK(){return this.r!=null}, +gi9(){return this.e.length===0}, +geS(){return B.b.U(this.e,"/")}, +ff(){var s,r=this,q=r.a +if(q!==""&&q!=="file")throw A.f(A.ac("Cannot extract a file path from a "+q+" URI")) +q=r.f +if((q==null?"":q)!=="")throw A.f(A.ac(u.z)) +q=r.r +if((q==null?"":q)!=="")throw A.f(A.ac(u.E)) +if(r.c!=null&&r.gc6()!=="")A.P(A.ac(u.Q)) +s=r.gnG() +A.xC(s,!1) +q=A.qj(B.b.U(r.e,"/")?"/":"",s,"/") +q=q.charCodeAt(0)==0?q:q +return q}, +j(a){return this.ght()}, +v(a,b){var s,r,q,p=this +if(b==null)return!1 +if(p===b)return!0 +s=!1 +if(t.jJ.b(b))if(p.a===b.gaV())if(p.c!=null===b.geT())if(p.b===b.gfg())if(p.gc6()===b.gc6())if(p.gcZ()===b.gcZ())if(p.e===b.gaT()){r=p.f +q=r==null +if(!q===b.gdL()){if(q)r="" +if(r===b.gd_()){r=p.r +q=r==null +if(!q===b.gdK()){s=q?"":r +s=s===b.gcR()}}}}return s}, +$ik1:1, +gaV(){return this.a}, +gaT(){return this.e}} +A.nS.prototype={ +giD(){var s,r,q,p,o=this,n=null,m=o.c +if(m==null){m=o.b +if(0>=m.length)return A.c(m,0) +s=o.a +m=m[0]+1 +r=B.b.ap(s,"?",m) +q=s.length +if(r>=0){p=A.hy(s,r+1,q,256,!1,!1) +q=r}else p=n +m=o.c=new A.kE("data","",n,n,A.hy(s,m,q,128,!1,!1),p,n)}return m}, +j(a){var s,r=this.b +if(0>=r.length)return A.c(r,0) +s=this.a +return r[0]===-1?"data:"+s:s}} +A.bN.prototype={ +geV(){return this.b>0}, +geT(){return this.c>0}, +geU(){return this.c>0&&this.d+1r?B.b.t(this.a,r,s-1):""}, +gc6(){var s=this.c +return s>0?B.b.t(this.a,s,this.d):""}, +gcZ(){var s,r=this +if(r.geU())return A.lA(B.b.t(r.a,r.d+1,r.e),null) +s=r.b +if(s===4&&B.b.U(r.a,"http"))return 80 +if(s===5&&B.b.U(r.a,"https"))return 443 +return 0}, +gaT(){return B.b.t(this.a,this.e,this.f)}, +gd_(){var s=this.f,r=this.r +return s=q.length)return s +return new A.bN(B.b.t(q,0,r),s.b,s.c,s.d,s.e,s.f,r,s.w)}, +iw(a){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=null +a=A.qG(a,0,a.length) +s=!(h.b===a.length&&B.b.U(h.a,a)) +r=a==="file" +q=h.c +p=q>0?B.b.t(h.a,h.b+3,q):"" +o=h.geU()?h.gcZ():g +if(s)o=A.p1(o,a) +q=h.c +if(q>0)n=B.b.t(h.a,q,h.d) +else n=p.length!==0||o!=null||r?"":g +q=h.a +m=h.f +l=B.b.t(q,h.e,m) +if(!r)k=n!=null&&l.length!==0 +else k=!0 +if(k&&!B.b.U(l,"/"))l="/"+l +k=h.r +j=m0)return b +s=b.c +if(s>0){r=a.b +if(r<=0)return b +q=r===4 +if(q&&B.b.U(a.a,"file"))p=b.e!==b.f +else if(q&&B.b.U(a.a,"http"))p=!b.ha("80") +else p=!(r===5&&B.b.U(a.a,"https"))||!b.ha("443") +if(p){o=r+1 +return new A.bN(B.b.t(a.a,0,o)+B.b.ab(b.a,c+1),r,s+o,b.d+o,b.e+o,b.f+o,b.r+o,a.w)}else return this.hw().d5(b)}n=b.e +c=b.f +if(n===c){s=b.r +if(c0?l:m +o=k-n +return new A.bN(B.b.t(a.a,0,k)+B.b.ab(s,n),a.b,a.c,a.d,m,c+o,b.r+o,a.w)}j=a.e +i=a.f +if(j===i&&a.c>0){while(B.b.aa(s,"../",n))n+=3 +o=j-n+1 +return new A.bN(B.b.t(a.a,0,j)+"/"+B.b.ab(s,n),a.b,a.c,a.d,j,c+o,b.r+o,a.w)}h=a.a +l=A.tB(this) +if(l>=0)g=l +else for(g=j;B.b.aa(h,"../",g);)g+=3 +f=0 +for(;;){e=n+3 +if(!(e<=c&&B.b.aa(s,"../",n)))break;++f +n=e}for(r=h.length,d="";i>g;){--i +if(!(i>=0&&i=0){s=!(q===4&&B.b.U(r.a,"file")) +q=s}else q=!1 +if(q)throw A.f(A.ac("Cannot extract a file path from a "+r.gaV()+" URI")) +q=r.f +s=r.a +if(q0?s.gc6():r,n=s.geU()?s.gcZ():r,m=s.a,l=s.f,k=B.b.t(m,s.e,l),j=s.r +l=l864e13)A.P(A.af(r,-864e13,864e13,"millisecondsSinceEpoch",null)) +A.dP(!0,"isUtc",t.k4) +return new A.dh(r,0,!0)}if(a instanceof RegExp)throw A.f(A.W("structured clone of RegExp",null)) +if(a instanceof Promise)return A.zq(a,t.X) +q=Object.getPrototypeOf(a) +if(q===Object.prototype||q===null){p=t.X +o=A.az(p,p) +s.k(0,a,o) +n=Object.keys(a) +m=[] +for(s=J.c4(n),p=s.gF(n);p.p();)m.push(A.up(p.gB())) +for(l=0;l"))}} +A.bQ.prototype={ +bQ(){var s,r +if(this.as==null)this.i3() +s=this.as +r=s==null?null:s.e1() +return r==null?null:r.aF()}, +i3(){var s,r +if(this.as!=null)return +s=this.Q +if(s!=null){r=s.e1().aF() +this.as=new A.it(r)}}} +A.dV.prototype={ +bn(){return"CompressionType."+this.b}} +A.lJ.prototype={ +ad(a){var s,r,q,p,o,n=this +if(a===0)return 0 +if(n.c===0){n.c=8 +n.b=n.a.aK()}for(s=n.a,r=0;q=n.c,a>q;){p=B.f.aW(r,q) +o=n.b +if(!(q>=0&&q<9))return A.c(B.aY,q) +r=p+(o&B.aY[q]) +a-=q +n.c=8 +q=s.b +q.toString +o=s.c++ +if(!(o>=0&&o0){if(q===0){n.c=8 +n.b=s.aK()}s=B.f.aW(r,a) +q=n.b +p=n.c-a +q=B.f.cI(q,p) +if(!(a<9))return A.c(B.aY,a) +r=s+(q&B.aY[a]) +n.c=p}return r}} +A.lH.prototype={ +mk(a,b){var s,r,q,p,o,n=this,m=new A.lJ(a) +n.cx=n.CW=n.ch=n.ay=0 +if(m.ad(8)!==66||m.ad(8)!==90||m.ad(8)!==104)return!1 +s=n.a=m.ad(8)-48 +if(s<0||s>9)return!1 +n.b=new Uint32Array(s*1e5) +r=0 +for(;;){s=a.c +q=a.d +q===$&&A.o() +if(!(s>>31)^o^4294967295}else if(p===2){m.ad(8) +m.ad(8) +m.ad(8) +m.ad(8) +return!0}}return!0}, +kN(a){var s,r,q,p +for(s=!0,r=!0,q=0;q<6;++q){p=a.ad(8) +if(p!==B.jo[q])r=!1 +if(p!==B.j_[q])s=!1 +if(!s&&!r)return-1}return r?0:2}, +kO(d4,d5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,d0=this,d1=4294967295,d2=d4.ad(1),d3=((d4.ad(8)<<8|d4.ad(8))<<8|d4.ad(8))>>>0 +d0.c=new Uint8Array(16) +for(s=0;s<16;++s){r=d0.c +q=d4.ad(1) +r.$flags&2&&A.t(r) +r[s]=q}d0.d=new Uint8Array(256) +for(s=0,p=0;s<16;++s,p+=16)if(d0.c[s]!==0)for(o=0;o<16;++o){r=d0.d +q=p+o +n=d4.ad(1) +r.$flags&2&&A.t(r) +if(!(q<256))return A.c(r,q) +r[q]=n}d0.kA() +r=d0.fx +if(r===0)return-1 +m=r+2 +l=d4.ad(3) +if(l<2||l>6)return-1 +r=d4.ad(15) +d0.ax=r +if(r<1)return-1 +d0.w=new Uint8Array(18002) +d0.x=new Uint8Array(18002) +for(s=0;r=d0.ax,s=l)return-1}r=d0.w +r.$flags&2&&A.t(r) +if(!(s<18002))return A.c(r,s) +r[s]=o}k=new Uint8Array(6) +for(s=0;s0;i=g){g=i-1 +k[i]=k[g]}k[0]=h +j&2&&A.t(q) +q[s]=h}d0.fr=t.aE.a(A.aE(6,$.uP(),!1,t.ev)) +for(f=0;f20)return-1 +if(d4.ad(1)===0)break +e=d4.ad(1)===0?e+1:e-1}r=d0.fr +if(!(f<6))return A.c(r,f) +r=r[f] +r.$flags&2&&A.t(r) +if(!(sc)c=b +if(b=0;--a2){for(n=a2*16,a3=15;a3>=0;--a3){if(!(a1>=0&&a1<4096))return A.c(r,a1) +r[a1]=n+a3;--a1}q[a2]=a1+1}d0.ay=0 +d0.ch=-1 +a4=d0.ej(d4) +if(a4<0)return-1 +for(a5=0;;){if(a4===a)break +if(a4===0||a4===1){a6=-1 +a7=1 +do{if(a7>=2097152)return-1 +if(a4===0)a6+=a7 +else if(a4===1)a6+=2*a7 +a7*=2 +a4=d0.ej(d4)}while(a4===0||a4===1);++a6 +r=d0.e +r===$&&A.o() +q=d0.f +n=d0.r[0] +if(!(n>=0&&n<4096))return A.c(q,n) +n=q[n] +if(!(n>=0&&n<256))return A.c(r,n) +a8=r[n] +n=d0.at +if(!(a8<256))return A.c(n,a8) +r=n[a8] +n.$flags&2&&A.t(n) +n[a8]=r+a6 +for(r=d0.b;a6>0;){if(a5>=a0)return-1 +r===$&&A.o() +r.$flags&2&&A.t(r) +if(!(a5>=0&&a5=a0)return-1 +a9=a4-1 +r=d0.r +q=d0.f +if(a9<16){b0=r[0] +r=b0+a9 +if(!(r>=0&&r<4096))return A.c(q,r) +a8=q[r] +for(r=q.$flags|0;a9>3;){b1=b0+a9 +n=b1-1 +if(!(n>=0&&n<4096))return A.c(q,n) +j=q[n] +r&2&&A.t(q) +if(!(b1>=0&&b1<4096))return A.c(q,b1) +q[b1]=j +j=b1-2 +if(!(j>=0))return A.c(q,j) +q[n]=q[j] +n=b1-3 +if(!(n>=0))return A.c(q,n) +q[j]=q[n] +j=b1-4 +if(!(j>=0))return A.c(q,j) +q[n]=q[j] +a9-=4}while(a9>0){n=b0+a9 +j=n-1 +if(!(j>=0&&j<4096))return A.c(q,j) +j=q[j] +r&2&&A.t(q) +if(!(n>=0&&n<4096))return A.c(q,n) +q[n]=j;--a9}r&2&&A.t(q) +if(!(b0>=0&&b0<4096))return A.c(q,b0) +q[b0]=a8}else{b2=B.f.av(a9,16) +b3=B.f.bl(a9,16) +if(!(b2>=0&&b2<16))return A.c(r,b2) +b0=r[b2]+b3 +if(!(b0>=0&&b0<4096))return A.c(q,b0) +a8=q[b0] +for(n=q.$flags|0;j=r[b2],b0>j;b0=b4){b4=b0-1 +if(!(b4>=0))return A.c(q,b4) +j=q[b4] +n&2&&A.t(q) +if(!(b0>=0))return A.c(q,b0) +q[b0]=j}r.$flags&2&&A.t(r) +r[b2]=j+1 +while(b2>0){r[b2]=r[b2]-1 +j=r[b2];--b2 +b5=r[b2]+16-1 +if(!(b5>=0&&b5<4096))return A.c(q,b5) +b5=q[b5] +n&2&&A.t(q) +if(!(j>=0&&j<4096))return A.c(q,j) +q[j]=b5}r[0]=r[0]-1 +j=r[0] +n&2&&A.t(q) +if(!(j>=0&&j<4096))return A.c(q,j) +q[j]=a8 +if(r[0]===0)for(a1=4095,a2=15;a2>=0;--a2){for(a3=15;a3>=0;--a3){n=r[a2]+a3 +if(!(n>=0&&n<4096))return A.c(q,n) +n=q[n] +if(!(a1>=0&&a1<4096))return A.c(q,a1) +q[a1]=n;--a1}r[a2]=a1+1}}r=d0.at +q=d0.e +q===$&&A.o() +if(!(a8>=0&&a8<256))return A.c(q,a8) +n=q[a8] +if(!(n<256))return A.c(r,n) +j=r[n] +r.$flags&2&&A.t(r) +r[n]=j+1 +j=d0.b +j===$&&A.o() +q=q[a8] +j.$flags&2&&A.t(j) +if(!(a5>=0&&a5=a5)return-1 +for(r=d0.at,s=0;s<=255;++s){q=r[s] +if(q<0||q>a5)return-1}r=d0.dy=new Int32Array(257) +r[0]=0 +for(q=d0.at,s=1;s<=256;++s)r[s]=q[s-1] +for(s=1;s<=256;++s)r[s]=r[s]+r[s-1] +for(s=0;s<=256;++s){q=r[s] +if(q<0||q>a5)return-1}for(s=1;s<=256;++s)if(r[s-1]>r[s])return-1 +for(q=d0.b,s=0;s=0&&j>>0 +r[a8]=r[a8]+1}q===$&&A.o() +r=q.length +if(!(d3>>8 +n=d2!==0 +if(n){if(b6>=1e5*d0.a)return-1 +if(!(b6>>8 +b8=b6&255^0 +b6=b7 +b9=618 +c0=1}else{if(b6>=1e5*d0.a)return d1 +if(!(b6>>8 +b9=0 +c0=0}c1=a5+1 +c2=d1 +if(n)for(c3=0,c4=0,c5=1;;c4=b8,b8=c7){for(r=c4&255;;){if(c3===0)break +d5.cA(c4) +q=c2>>>24&255^r +if(!(q<256))return A.c(B.X,q) +c2=(c2<<8^B.X[q])>>>0;--c3}if(c5===c1)return c2 +if(c5>c1)return-1 +r=d0.b +q=r.length +if(!(b6>=0&&b6>>8 +if(b9===0){if(!(c0<512))return A.c(B.Y,c0) +b9=B.Y[c0];++c0 +if(c0===512)c0=0}--b9 +n=b9===1?1:0 +c6=b6&255^n;++c5 +c3=1 +if(c5===c1){c7=b8 +b6=b7 +continue}if(c6!==b8){c7=c6 +b6=b7 +continue}if(!(b7>>8 +if(b9===0){if(!(c0<512))return A.c(B.Y,c0) +b9=B.Y[c0];++c0 +if(c0===512)c0=0}n=b9===1?1:0 +c6=b6&255^n;++c5 +if(c5===c1){c7=b8 +b6=b7 +c3=2 +continue}if(c6!==b8){c7=c6 +b6=b7 +c3=2 +continue}if(!(b7>>8 +if(b9===0){if(!(c0<512))return A.c(B.Y,c0) +b9=B.Y[c0];++c0 +if(c0===512)c0=0}n=b9===1?1:0 +c6=b6&255^n;++c5 +if(c5===c1){c7=b8 +b6=b7 +c3=3 +continue}if(c6!==b8){c7=c6 +b6=b7 +c3=3 +continue}if(!(b7>>8 +if(b9===0){if(!(c0<512))return A.c(B.Y,c0) +b9=B.Y[c0];++c0 +if(c0===512)c0=0}n=b9===1?1:0 +c3=(b6&255^n)+4 +if(!(b7>>8 +if(b9===0){if(!(c0<512))return A.c(B.Y,c0) +b9=B.Y[c0];++c0 +if(c0===512)c0=0}r=b9===1?1:0 +c7=b6&255^r +c5=c5+1+1 +b6=b7}else for(c8=b8,c3=0,c4=0,c5=1;;c4=c8,c8=c9){if(c3>0){for(r=c4&255;;){if(c3===1)break +d5.cA(c4) +q=c2>>>24&255^r +if(!(q<256))return A.c(B.X,q) +c2=c2<<8^B.X[q];--c3}d5.cA(c4) +r=c2>>>24&255^r +if(!(r<256))return A.c(B.X,r) +c2=(c2<<8^B.X[r])>>>0}if(c5>c1)return-1 +if(c5===c1)return c2 +r=1e5*d0.a +if(b6>=r)return-1 +q=d0.b +n=q.length +if(!(b6>=0&&b6>>8;++c5 +c3=0 +if(c6!==c8){d5.cA(c8) +r=c2>>>24&255^c8&255 +if(!(r<256))return A.c(B.X,r) +c2=(c2<<8^B.X[r])>>>0 +c9=c6 +continue}if(c5===c1){d5.cA(c8) +r=c2>>>24&255^c8&255 +if(!(r<256))return A.c(B.X,r) +c2=(c2<<8^B.X[r])>>>0 +c9=c8 +continue}if(b6>=r)return-1 +if(!(b6>>8;++c5 +if(c5===c1){c9=c8 +c3=2 +continue}if(c6!==c8){c9=c6 +c3=2 +continue}if(b6>=r)return-1 +if(!(b6>>8;++c5 +if(c5===c1){c9=c8 +c3=3 +continue}if(c6!==c8){c9=c6 +c3=3 +continue}if(b6>=r)return-1 +if(!(b6>>8 +c3=(b6&255)+4 +if(b7>=r)return-1 +if(!(b7>>8 +c5=c5+1+1}return c2}, +ej(a){var s,r,q,p,o=this,n=o.ay +if(n===0){n=++o.ch +s=o.ax +s===$&&A.o() +if(n>=s)return-1 +s=o.ay=50 +r=o.x +r===$&&A.o() +if(!(n>=0&&n<18002))return A.c(r,n) +n=r[n] +o.CW=n +r=o.as +r===$&&A.o() +if(!(n<6))return A.c(r,n) +o.cx=r[n] +r=o.y +r===$&&A.o() +o.cy=r[n] +r=o.Q +r===$&&A.o() +o.db=r[n] +r=o.z +r===$&&A.o() +o.dx=r[n] +n=s}o.ay=n-1 +q=o.cx +p=a.ad(q) +for(;;){if(q>20)return-1 +n=o.cy +n===$&&A.o() +if(!(q>=0&&q>>0}n=o.dx +n===$&&A.o() +if(!(q>=0&&q=258)return-1 +s=o.db +s===$&&A.o() +if(!(n>=0&&n=0&&p=0&&m=0&&j=0&&q>>0}for(q=e+1,s=a.length;q<=f;++q){m=q-1 +if(!(m>=0&&m=0&&q>>0)-l}}, +kA(){var s,r,q,p=this +p.fx=0 +p.e=new Uint8Array(256) +for(s=0;s<256;++s){r=p.d +r===$&&A.o() +if(r[s]!==0){r=p.e +q=p.fx++ +r.$flags&2&&A.t(r) +if(!(q<256))return A.c(r,q) +r[q]=s}}}} +A.ot.prototype={ +fa(a,b){var s,r,q,p,o,n=this,m=n.a=n.ks(a) +if(m<0)return +a.c=m +if(a.ak()!==101010256)return +a.a5() +a.a5() +a.a5() +a.a5() +n.f=a.ak() +n.r=a.ak() +s=a.a5() +if(s>0)a.is(s,!1) +n.kP(a) +m=n.r +r=n.f +q=a.fG(Math.min(r,1024),r,m) +m=n.x +for(;;){r=q.c +p=q.d +p===$&&A.o() +if(!(r=0;){a.c=p +n=a.dc(q,p) +m=a.c +l=n.b +a.c=m+(l==null?0:l.length-n.c) +k=new A.e_(B.F) +k.fM(n.aF(),B.F,null,null) +for(j=o;j>=0;--j){k.c=j +if(k.ak()===101010256){a.c=s +return p+j}}p=p>0&&p2){s=k.y +s.toString +o=A.bv(s,B.F,null,null) +for(;;){s=o.c +p=o.d +p===$&&A.o() +if(!(s=0&&p>>0 +return s*((s^1)>>>0)>>>8&255}, +kf(a){var s,r,q,p,o,n=this,m=null +if(n.Q==null)return A.bv(new Uint8Array(0),B.F,m,m) +for(s=0;s<12;++s){r=n.Q +q=r.b +q.toString +r=r.c++ +if(!(r>=0&&r0)j.at=a.dV(s) +if(r>0){p=a.be(r).aF() +j.ax=p +if(r>=4){o=A.bv(p,B.F,null,null) +for(;;){p=o.b +if(!((p==null?0:p.length-o.c)>=4))break +n=o.a5() +m=o.a5() +l=o.dc(m,o.c) +p=o.c +k=l.b +o.c=p+(k==null?0:k.length-l.c) +if(n===1){if(m>=8&&j.x===4294967295){j.x=l.bz() +m-=8}if(m>=8&&j.w===4294967295){j.w=l.bz() +m-=8}if(m>=8&&j.as===4294967295){j.as=l.bz() +m-=8}if(m>=4&&j.y===65535)j.y=l.ak()}}}}if(q>0)a.dV(q) +b.c=j.as +p=new A.ku(B.aW,j,B.aC,A.i([A.cI(0),A.cI(0),A.cI(0)],t.aa)) +j.ch=p +p.fa(b,c)}, +j(a){return this.at}} +A.os.prototype={ +ml(a,a0,a1,a2){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=null,b=new A.ot(A.i([],t.iJ)) +this.a=b +b.fa(a,a1) +b=A.i([],t.c_) +s=A.az(t.N,t.S) +r=new A.hQ(b,s) +for(q=this.a.x,p=q.length,o=t.L,n=0;n>>16 +j=l.x +i=B.b.bu(j,"/")||B.b.bu(j,"\\") +h=s.m(0,j) +if(h!=null){if(h>>>0!==h||h>=b.length)return A.c(b,h) +g=b[h]}else g=c +if(g==null){g=i?new A.bQ(j,B.f.av(Date.now(),1000)):A.rd(j,l.w,l) +r.l(0,g)}g.b=k +if(m.a>>>8===3)if((k&61440)===40960){f=A.rd(j,l.w,l) +if(f.as==null)f.i3() +j=f.as +if(j==null)e=c +else{j=j.a +e=new A.e_(B.F) +e.fM(j,B.F,c,c)}d=e==null?c:e.aF() +if(d!=null){o.a(d) +new A.kZ(!1).h1(d,0,c,!0)}}}return r}} +A.mD.prototype={ +jU(a){var s,r,q,p,o,n,m,l,k,j,i,h,g=this,f=a.length +for(s=0;sg.b)g.b=r +if(r>>0 +k=k>>>1}for(h=(l|s)>>>0,i=j;i=0))return A.c(p,i) +p[i]=h}++n}++o +n=n<<1>>>0 +m=m<<1>>>0}}} +A.oq.prototype={} +A.p6.prototype={ +i2(a,b,c,d){var s,r,q=null +for(;;){s=a.c +r=a.d +r===$&&A.o() +if(!(s=r +s=r}else s=!0 +if(s)return!1 +q=p.b4(3) +switch(B.f.b5(q,1)){case 0:if(p.kH()===-1)return!1 +break +case 1:if(p.h2($.uR(),$.uQ())===-1)return!1 +break +case 2:if(p.kG()===-1)return!1 +break +default:return!1}return(q&1)===0}, +b4(a){var s,r,q,p,o=this +if(a===0)return 0 +while(s=o.e,s=s)return-1 +s=o.gbi() +r=s.b +r.toString +s=s.c++ +if(!(s>=0&&s>>0 +o.e=r+8}r=o.d +p=B.f.bp(1,a) +o.d=B.f.dt(r,a) +o.e=s-a +return(r&p-1)>>>0}, +er(a){var s,r,q,p,o,n,m,l=this,k=a.a +k===$&&A.o() +s=a.b +while(r=l.e,r=r)return-1 +r=l.gbi() +q=r.b +q.toString +r=r.c++ +if(!(r>=0&&r>>0 +l.e=q+8}q=l.d +o=(q&B.f.aW(1,s)-1)>>>0 +if(!(o>>16 +l.d=B.f.dt(q,m) +l.e=r-m +return n&65535}, +kH(){var s,r,q=this +q.e=q.d=0 +s=q.b4(16) +r=q.b4(16) +if(s!==0&&s!==(r^65535)>>>0)return-1 +if(s>q.gbi().gn(0))return-1 +q.c.oy(q.gbi().be(s)) +return 0}, +kG(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.b4(5) +if(h===-1)return-1 +h+=257 +if(h>288)return-1 +s=i.b4(5) +if(s===-1)return-1;++s +if(s>32)return-1 +r=i.b4(4) +if(r===-1)return-1 +r+=4 +if(r>19)return-1 +q=new Uint8Array(19) +for(p=0;p285)return-1 +if(r===256)break +if(r<256){s.cA(r&255) +continue}q=r-257 +if(!(q>=0&&q<29))return A.c(B.d_,q) +p=B.d_[q] +o=m.b4(B.jn[q]) +n=m.er(b) +if(n<0||n>29)return-1 +if(!(n>=0&&n<30))return A.c(B.d0,n) +s.ov(B.d0[n]+m.b4(B.iX[n]),p+o)}while(s=m.e,s>=8){m.e=s-8 +s=m.gbi() +p=--s.c +o=s.d +o===$&&A.o() +s.c=B.f.m0(p,0,o)}return 0}, +kd(a,b,c){var s,r,q,p,o,n,m,l,k=this +for(s=0,r=0;r0;o=m,r=l){l=r+1 +n&2&&A.t(c) +if(!(r>=0&&r0;o=m,r=l){l=r+1 +n&2&&A.t(c) +if(!(r>=0&&r0;o=m,r=l){l=r+1 +n&2&&A.t(c) +if(!(r>=0&&r15)return-1 +l=r+1 +c.$flags&2&&A.t(c) +if(!(r>=0&&rq.byteLength)A.P(A.W("Input buffer too short",null)) +if(16>r.byteLength)A.P(A.W("Output buffer too short",null)) +k=l.c +j=l.b +if(k){j===$&&A.o() +l.kl(q,0,r,0,j)}else{j===$&&A.o() +l.kg(q,0,r,0,j)}for(i=0;i=0))return A.c(p,l) +j=p[l] +if(!(l<4))return A.c(p,l) +p[l]=j+1 +if(p[l]!==0)break}j=k.a +k.kq(j.a,j.b,p,o,n) +n+=r}B.k.bD(c,d,d+s,o) +return k.a.c}, +kq(a,b,c,d,e){var s,r,q,p,o,n,m,l,k,j,i,h=this +if(b<=0)throw A.f(A.W("Iteration count must be at least 1.",null)) +s=h.b +r=s.a +r.bA(a,0,a.length) +r.bA(c,0,4) +q=h.c +q===$&&A.o() +s.c4(q,0) +q=h.c +B.k.bD(d,e,e+q.length,q) +for(q=d.length,p=1;p>>0 +r.b=q +if(s!==q){q=r.a +q===$&&A.o();++q +r.a=q +r.a=q>>>0}}, +j(a){var s=this,r=new A.Y(""),q=s.a +q===$&&A.o() +s.hj(r,q) +q=s.b +q===$&&A.o() +s.hj(r,q) +q=r.a +return q.charCodeAt(0)==0?q:q}, +hj(a,b){var s,r=B.f.d6(b,16) +for(s=8-r.length;s>0;--s)a.a+="0" +a.a+=r}, +gq(a){var s,r=this.a +r===$&&A.o() +s=this.b +s===$&&A.o() +return A.aX(r,s,B.u,B.u)}} +A.jx.prototype={ +aL(){var s,r=this +r.a.jl(0) +r.c=0 +B.k.c5(r.b,0,4,0) +r.w=0 +s=r.r +B.a.c5(s,0,s.length,0) +s=r.f +B.a.k(s,0,1732584193) +B.a.k(s,1,4023233417) +B.a.k(s,2,2562383102) +B.a.k(s,3,271733878) +B.a.k(s,4,3285377520)}, +dX(a){var s,r=this,q=r.b,p=r.c +p===$&&A.o() +s=p+1 +r.c=s +q.$flags&2&&A.t(q) +if(!(p<4))return A.c(q,p) +q[p]=a&255 +if(s===4){r.hn(q,0) +r.c=0}r.a.fH(1)}, +bA(a,b,c){var s=this.kL(a,b,c) +b+=s +c-=s +s=this.kM(a,b,c) +this.kI(a,b+s,c-s)}, +c4(a,b){var s,r=this,q=A.rL(r.a),p=q.a +p===$&&A.o() +p=A.r0(p,3) +q.a=p +s=q.b +s===$&&A.o() +q.a=(p|s>>>29)>>>0 +q.b=A.r0(s,3) +r.kK() +r.kJ(q) +r.ef() +r.kD(a,b) +r.aL() +return 20}, +hn(a,b){var s=this,r=s.w +r===$&&A.o() +s.w=r+1 +B.a.k(s.r,r,J.bf(B.k.ga9(a),a.byteOffset,a.length).getUint32(b,B.bE===s.d)) +if(s.w===16)s.ef()}, +ef(){this.nL() +this.w=0 +B.a.c5(this.r,0,16,0)}, +kI(a,b,c){var s +for(s=a.length;c>0;){if(!(b4;){this.hn(a,b) +b+=4 +c-=4 +s.fH(4) +r+=4}return r}, +kL(a,b,c){var s,r=a.length,q=0 +for(;;){s=this.c +s===$&&A.o() +if(!(s!==0&&c>0))break +if(!(b14)r.ef() +q=r.d +switch(q){case B.bE:q=r.r +s=a.b +s===$&&A.o() +B.a.k(q,14,s) +s=a.a +s===$&&A.o() +B.a.k(q,15,s) +break +case B.cL:q=r.r +s=a.a +s===$&&A.o() +B.a.k(q,14,s) +s=a.b +s===$&&A.o() +B.a.k(q,15,s) +break +default:throw A.f(A.ce("Invalid endianness: "+q.j(0)))}}, +kD(a,b){var s,r,q,p,o,n,m,l +for(s=this.e,r=this.f,q=r.length,p=a.length,o=B.bE===this.d,n=0;n>>31)>>>0)}p=this.f +o=p.length +if(0>=o)return A.c(p,0) +k=p[0] +if(1>=o)return A.c(p,1) +j=p[1] +if(2>=o)return A.c(p,2) +i=p[2] +if(3>=o)return A.c(p,3) +h=p[3] +if(4>=o)return A.c(p,4) +g=p[4] +for(f=k,e=0,d=0;d<4;++d,e=c){o=$.aM[5] +c=e+1 +if(!(e>>27)>>>0)+((j&i|~j&h)>>>0)+s[e]+1518500249>>>0 +n=$.aM[30] +j=((j&n)<<30|j>>>2)>>>0 +e=c+1 +if(!(c>>27)>>>0)+((f&j|~f&i)>>>0)+s[c]+1518500249>>>0 +f=((f&n)<<30|f>>>2)>>>0 +c=e+1 +if(!(e>>27)>>>0)+((g&f|~g&j)>>>0)+s[e]+1518500249>>>0 +g=((g&n)<<30|g>>>2)>>>0 +e=c+1 +if(!(c>>27)>>>0)+((h&g|~h&f)>>>0)+s[c]+1518500249>>>0 +h=((h&n)<<30|h>>>2)>>>0 +c=e+1 +if(!(e>>27)>>>0)+((i&h|~i&g)>>>0)+s[e]+1518500249>>>0 +i=((i&n)<<30|i>>>2)>>>0}for(d=0;d<4;++d,e=c){o=$.aM[5] +c=e+1 +if(!(e>>27)>>>0)+((j^i^h)>>>0)+s[e]+1859775393>>>0 +n=$.aM[30] +j=((j&n)<<30|j>>>2)>>>0 +e=c+1 +if(!(c>>27)>>>0)+((f^j^i)>>>0)+s[c]+1859775393>>>0 +f=((f&n)<<30|f>>>2)>>>0 +c=e+1 +if(!(e>>27)>>>0)+((g^f^j)>>>0)+s[e]+1859775393>>>0 +g=((g&n)<<30|g>>>2)>>>0 +e=c+1 +if(!(c>>27)>>>0)+((h^g^f)>>>0)+s[c]+1859775393>>>0 +h=((h&n)<<30|h>>>2)>>>0 +c=e+1 +if(!(e>>27)>>>0)+((i^h^g)>>>0)+s[e]+1859775393>>>0 +i=((i&n)<<30|i>>>2)>>>0}for(d=0;d<4;++d,e=c){o=$.aM[5] +c=e+1 +if(!(e>>27)>>>0)+((j&i|j&h|i&h)>>>0)+s[e]+2400959708>>>0 +n=$.aM[30] +j=((j&n)<<30|j>>>2)>>>0 +e=c+1 +if(!(c>>27)>>>0)+((f&j|f&i|j&i)>>>0)+s[c]+2400959708>>>0 +f=((f&n)<<30|f>>>2)>>>0 +c=e+1 +if(!(e>>27)>>>0)+((g&f|g&j|f&j)>>>0)+s[e]+2400959708>>>0 +g=((g&n)<<30|g>>>2)>>>0 +e=c+1 +if(!(c>>27)>>>0)+((h&g|h&f|g&f)>>>0)+s[c]+2400959708>>>0 +h=((h&n)<<30|h>>>2)>>>0 +c=e+1 +if(!(e>>27)>>>0)+((i&h|i&g|h&g)>>>0)+s[e]+2400959708>>>0 +i=((i&n)<<30|i>>>2)>>>0}for(d=0;d<4;++d,e=c){o=$.aM[5] +c=e+1 +if(!(e>>27)>>>0)+((j^i^h)>>>0)+s[e]+3395469782>>>0 +n=$.aM[30] +j=((j&n)<<30|j>>>2)>>>0 +e=c+1 +if(!(c>>27)>>>0)+((f^j^i)>>>0)+s[c]+3395469782>>>0 +f=((f&n)<<30|f>>>2)>>>0 +c=e+1 +if(!(e>>27)>>>0)+((g^f^j)>>>0)+s[e]+3395469782>>>0 +g=((g&n)<<30|g>>>2)>>>0 +e=c+1 +if(!(c>>27)>>>0)+((h^g^f)>>>0)+s[c]+3395469782>>>0 +h=((h&n)<<30|h>>>2)>>>0 +c=e+1 +if(!(e>>27)>>>0)+((i^h^g)>>>0)+s[e]+3395469782>>>0 +i=((i&n)<<30|i>>>2)>>>0}B.a.k(p,0,k+f>>>0) +B.a.k(p,1,p[1]+j>>>0) +B.a.k(p,2,p[2]+i>>>0) +B.a.k(p,3,p[3]+h>>>0) +B.a.k(p,4,p[4]+g>>>0)}} +A.jw.prototype={ +ia(a){var s,r,q,p,o=this,n=o.a +n.aL() +s=a.a +s===$&&A.o() +r=s.length +q=o.c +q===$&&A.o() +if(r>q){n.bA(s,0,r) +s=o.d +s===$&&A.o() +n.c4(s,0) +s=o.b +s===$&&A.o() +r=s}else{p=o.d +p===$&&A.o() +B.k.bD(p,0,r,s)}s=o.d +s===$&&A.o() +B.k.c5(s,r,s.length,0) +s=o.e +s===$&&A.o() +B.k.bD(s,0,q,o.d) +o.hE(o.d,q,54) +o.hE(o.e,q,92) +q=o.d +n.bA(q,0,q.length)}, +c4(a,b){var s,r,q=this,p=q.a,o=q.e +o===$&&A.o() +s=q.c +s===$&&A.o() +p.c4(o,s) +o=q.e +p.bA(o,0,o.length) +r=p.c4(a,b) +o=q.e +B.k.c5(o,s,o.length,0) +o=q.d +o===$&&A.o() +p.bA(o,0,o.length) +return r}, +hE(a,b,c){var s,r,q,p +for(s=a.length,r=a.$flags|0,q=0;q>>8&255]&255)<<8|(B.L[a>>>16&255]&255)<<16|B.L[a>>>24&255]<<24)>>>0}, +iN(a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this,a=a1.a +a===$&&A.o() +s=a.length +if(s<16||s>32||(s&7)!==0)throw A.f(A.W("Key length not 128/192/256 bits.",null)) +r=s>>>2 +q=r+6 +b.a=q +p=q+1 +o=J.rv(p,t.L) +for(q=t.S,n=0;n=a)return A.c(o,0) +q=o[0] +B.a.k(q,0,l) +k=m.getUint32(4,!0) +B.a.k(q,1,k) +j=m.getUint32(8,!0) +B.a.k(q,2,j) +i=m.getUint32(12,!0) +B.a.k(q,3,i) +for(n=1;n<=10;++n){l=(l^b.cJ((i>>>8|(i&$.aM[24])<<24)>>>0)^B.iU[n-1])>>>0 +if(!(n>>0 +B.a.k(q,1,k) +j=(j^k)>>>0 +B.a.k(q,2,j) +i=(i^j)>>>0 +B.a.k(q,3,i)}break +case 6:m=J.bf(B.k.ga9(a),a.byteOffset,s) +l=m.getUint32(0,!0) +a=o.length +if(0>=a)return A.c(o,0) +q=o[0] +B.a.k(q,0,l) +k=m.getUint32(4,!0) +B.a.k(q,1,k) +j=m.getUint32(8,!0) +B.a.k(q,2,j) +i=m.getUint32(12,!0) +B.a.k(q,3,i) +h=m.getUint32(16,!0) +g=m.getUint32(20,!0) +for(n=1,f=1;;){if(!(n>>8|(g&$.aM[24])<<24)>>>0)^f)>>>0 +B.a.k(q,2,l) +k=(k^l)>>>0 +B.a.k(q,3,k) +j=(j^k)>>>0 +q=n+1 +if(!(q>>0 +B.a.k(q,1,i) +h=(h^i)>>>0 +B.a.k(q,2,h) +g=(g^h)>>>0 +B.a.k(q,3,g) +f=e<<1 +l=(l^b.cJ((g>>>8|(g&$.aM[24])<<24)>>>0)^e)>>>0 +q=n+2 +if(!(q>>0 +B.a.k(q,1,k) +j=(j^k)>>>0 +B.a.k(q,2,j) +i=(i^j)>>>0 +B.a.k(q,3,i) +n+=3 +if(n>=13)break +h=(h^i)>>>0 +g=(g^h)>>>0}break +case 8:m=J.bf(B.k.ga9(a),a.byteOffset,s) +l=m.getUint32(0,!0) +a=o.length +if(0>=a)return A.c(o,0) +q=o[0] +B.a.k(q,0,l) +k=m.getUint32(4,!0) +B.a.k(q,1,k) +j=m.getUint32(8,!0) +B.a.k(q,2,j) +i=m.getUint32(12,!0) +B.a.k(q,3,i) +h=m.getUint32(16,!0) +if(1>=a)return A.c(o,1) +q=o[1] +B.a.k(q,0,h) +g=m.getUint32(20,!0) +B.a.k(q,1,g) +d=m.getUint32(24,!0) +B.a.k(q,2,d) +c=m.getUint32(28,!0) +B.a.k(q,3,c) +for(n=2,f=1;;f=e){e=f<<1 +l=(l^b.cJ((c>>>8|(c&$.aM[24])<<24)>>>0)^f)>>>0 +if(!(n>>0 +B.a.k(q,1,k) +j=(j^k)>>>0 +B.a.k(q,2,j) +i=(i^j)>>>0 +B.a.k(q,3,i);++n +if(n>=15)break +h=(h^b.cJ(i))>>>0 +if(!(n>>0 +B.a.k(q,1,g) +d=(d^g)>>>0 +B.a.k(q,2,d) +c=(c^d)>>>0 +B.a.k(q,3,c);++n}break +default:throw A.f(A.ce("Should never get here"))}return o}, +kl(b3,b4,b5,b6,b7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2 +t.eP.a(b7) +s=J.bf(B.k.ga9(b3),b3.byteOffset,16) +r=s.getUint32(b4,!0) +q=s.getUint32(b4+4,!0) +p=s.getUint32(b4+8,!0) +o=s.getUint32(b4+12,!0) +n=b7.length +if(0>=n)return A.c(b7,0) +m=b7[0] +l=r^m[0] +k=q^m[1] +j=p^m[2] +i=o^m[3] +for(m=this.a-1,h=1;h>>8&255] +e=$.aM[8] +d=B.j[j>>>16&255] +c=$.aM[16] +b=B.j[i>>>24&255] +a=$.aM[24] +if(!(h>>24|(f&e)<<8)^(d>>>16|(d&c)<<16)^(b>>>8|(b&a)<<24)^a0[0] +b=B.j[k&255] +d=B.j[j>>>8&255] +f=B.j[i>>>16&255] +g=B.j[l>>>24&255] +a2=b^(d>>>24|(d&e)<<8)^(f>>>16|(f&c)<<16)^(g>>>8|(g&a)<<24)^a0[1] +g=B.j[j&255] +f=B.j[i>>>8&255] +d=B.j[l>>>16&255] +b=B.j[k>>>24&255] +a3=g^(f>>>24|(f&e)<<8)^(d>>>16|(d&c)<<16)^(b>>>8|(b&a)<<24)^a0[2] +b=B.j[i&255] +l=B.j[l>>>8&255] +k=B.j[k>>>16&255] +j=B.j[j>>>24&255];++h +i=b^(l>>>24|(l&e)<<8)^(k>>>16|(k&c)<<16)^(j>>>8|(j&a)<<24)^a0[3] +a0=B.j[a1&255] +j=B.j[a2>>>8&255] +k=B.j[a3>>>16&255] +l=B.j[i>>>24&255] +if(!(h>>24|(j&e)<<8)^(k>>>16|(k&c)<<16)^(l>>>8|(l&a)<<24)^b[0] +k=B.j[a2&255] +j=B.j[a3>>>8&255] +a0=B.j[i>>>16&255] +d=B.j[a1>>>24&255] +k=k^(j>>>24|(j&e)<<8)^(a0>>>16|(a0&c)<<16)^(d>>>8|(d&a)<<24)^b[1] +d=B.j[a3&255] +a0=B.j[i>>>8&255] +j=B.j[a1>>>16&255] +f=B.j[a2>>>24&255] +j=d^(a0>>>24|(a0&e)<<8)^(j>>>16|(j&c)<<16)^(f>>>8|(f&a)<<24)^b[2] +f=B.j[i&255] +a0=B.j[a1>>>8&255] +d=B.j[a2>>>16&255] +g=B.j[a3>>>24&255];++h +i=f^(a0>>>24|(a0&e)<<8)^(d>>>16|(d&c)<<16)^(g>>>8|(g&a)<<24)^b[3]}n=B.j[l&255] +m=A.as(B.j[k>>>8&255],24) +g=A.as(B.j[j>>>16&255],16) +f=A.as(B.j[i>>>24&255],8) +if(!(h>>8&255],24) +m=A.as(B.j[i>>>16&255],16) +n=A.as(B.j[l>>>24&255],8) +if(!(h>>8&255],24) +g=A.as(B.j[l>>>16&255],16) +f=A.as(B.j[k>>>24&255],8) +if(!(h>>8&255],24) +k=A.as(B.j[k>>>16&255],16) +j=A.as(B.j[j>>>24&255],8) +i=h+1 +g=b7.length +if(!(h>>8&255] +l=this.d +f=a3>>>16&255 +m=l.length +if(!(f>>24&255 +if(!(n>>8&255] +b=B.L[a4>>>16&255] +a=a1>>>24&255 +if(!(a>>8&255] +a7=B.L[a1>>>16&255] +a8=B.L[a2>>>24&255] +a9=g[2] +b0=a4&255 +if(!(b0>>8&255 +if(!(b1>>16&255 +if(!(b2>>24&255] +g=g[3] +m=J.bf(B.k.ga9(b5),b5.byteOffset,16) +m.$flags&2&&A.t(m,11) +m.setUint32(b6,(j&255^(k&255)<<8^(f&255)<<16^n<<24^e)>>>0,!0) +e=J.bf(B.k.ga9(b5),b5.byteOffset,16) +e.$flags&2&&A.t(e,11) +e.setUint32(b6+4,(d&255^(c&255)<<8^(b&255)<<16^a<<24^a0)>>>0,!0) +a0=J.bf(B.k.ga9(b5),b5.byteOffset,16) +a0.$flags&2&&A.t(a0,11) +a0.setUint32(b6+8,(a5&255^(a6&255)<<8^(a7&255)<<16^a8<<24^a9)>>>0,!0) +a9=J.bf(B.k.ga9(b5),b5.byteOffset,16) +a9.$flags&2&&A.t(a9,11) +a9.setUint32(b6+12,(b0&255^(b1&255)<<8^(b2&255)<<16^l<<24^g)>>>0,!0)}, +kg(b3,b4,b5,b6,b7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2 +t.eP.a(b7) +s=J.bf(B.k.ga9(b3),b3.byteOffset,16).getUint32(b4,!0) +r=J.bf(B.k.ga9(b3),b3.byteOffset,16).getUint32(b4+4,!0) +q=J.bf(B.k.ga9(b3),b3.byteOffset,16).getUint32(b4+8,!0) +p=J.bf(B.k.ga9(b3),b3.byteOffset,16).getUint32(b4+12,!0) +o=this.a +n=b7.length +if(!(o1;){m=B.i[l&255] +g=B.i[h>>>8&255] +f=$.aM[8] +e=B.i[j>>>16&255] +d=$.aM[16] +c=B.i[o>>>24&255] +b=$.aM[24] +if(!(i>>24|(g&f)<<8)^(e>>>16|(e&d)<<16)^(c>>>8|(c&b)<<24)^k[0] +c=B.i[o&255] +e=B.i[l>>>8&255] +g=B.i[h>>>16&255] +m=B.i[j>>>24&255] +a0=c^(e>>>24|(e&f)<<8)^(g>>>16|(g&d)<<16)^(m>>>8|(m&b)<<24)^k[1] +m=B.i[j&255] +g=B.i[o>>>8&255] +e=B.i[l>>>16&255] +c=B.i[h>>>24&255] +a1=m^(g>>>24|(g&f)<<8)^(e>>>16|(e&d)<<16)^(c>>>8|(c&b)<<24)^k[2] +c=B.i[h&255] +j=B.i[j>>>8&255] +o=B.i[o>>>16&255] +l=B.i[l>>>24&255];--i +h=c^(j>>>24|(j&f)<<8)^(o>>>16|(o&d)<<16)^(l>>>8|(l&b)<<24)^k[3] +k=B.i[a&255] +l=B.i[h>>>8&255] +o=B.i[a1>>>16&255] +j=B.i[a0>>>24&255] +if(!(i>>24|(l&f)<<8)^(o>>>16|(o&d)<<16)^(j>>>8|(j&b)<<24)^c[0] +j=B.i[a0&255] +o=B.i[a>>>8&255] +k=B.i[h>>>16&255] +e=B.i[a1>>>24&255] +o=j^(o>>>24|(o&f)<<8)^(k>>>16|(k&d)<<16)^(e>>>8|(e&b)<<24)^c[1] +e=B.i[a1&255] +k=B.i[a0>>>8&255] +j=B.i[a>>>16&255] +g=B.i[h>>>24&255] +j=e^(k>>>24|(k&f)<<8)^(j>>>16|(j&d)<<16)^(g>>>8|(g&b)<<24)^c[2] +g=B.i[h&255] +k=B.i[a1>>>8&255] +e=B.i[a0>>>16&255] +m=B.i[a>>>24&255];--i +h=g^(k>>>24|(k&f)<<8)^(e>>>16|(e&d)<<16)^(m>>>8|(m&b)<<24)^c[3]}n=B.i[l&255] +m=A.as(B.i[h>>>8&255],24) +g=A.as(B.i[j>>>16&255],16) +f=A.as(B.i[o>>>24&255],8) +if(!(i>=0&&i>>8&255],24) +m=A.as(B.i[h>>>16&255],16) +n=A.as(B.i[j>>>24&255],8) +if(!(i>>8&255],24) +g=A.as(B.i[l>>>16&255],16) +f=A.as(B.i[h>>>24&255],8) +if(!(i>>8&255],24) +o=A.as(B.i[o>>>16&255],16) +l=A.as(B.i[l>>>24&255],8) +g=b7.length +if(!(i>>8&255 +f=o.length +if(!(j>>16&255 +if(!(m>>24&255] +if(0>=g)return A.c(b7,0) +g=b7[0] +e=g[0] +d=a0&255 +if(!(d>>8&255 +if(!(c>>16&255] +k=a1>>>24&255 +if(!(k>>8&255] +a5=B.af[a>>>16&255] +a6=h>>>24&255 +if(!(a6>>8&255 +if(!(a9>>16&255 +if(!(b0>>24&255 +if(!(b1>>0,!0) +b2.setUint32(b6+4,(d&255^(c&255)<<8^(b&255)<<16^k<<24^a2)>>>0,!0) +b2.setUint32(b6+8,(a3&255^(a4&255)<<8^(a5&255)<<16^a6<<24^a7)>>>0,!0) +b2.setUint32(b6+12,(a8&255^(a9&255)<<8^(b0&255)<<16^b1<<24^g)>>>0,!0)}} +A.fe.prototype={} +A.it.prototype={ +gn(a){var s=this.a.length +return s}, +e1(){return A.bv(this.a,B.F,null,null)}} +A.e_.prototype={ +fM(a,b,c,d){var s,r +if(d==null)d=0 +if(c==null)c=J.b6(a)-d +s=J.ad(a) +if(d+c>s.gn(a))c=s.gn(a)-d +r=t.ev.b(a)?a:new Uint8Array(A.hC(a)) +s=J.dS(B.k.ga9(r),r.byteOffset+d,c) +this.b=s +this.d=s.length}, +gn(a){var s=this.b +return s==null?0:s.length-this.c}, +fG(a,b,c){var s=this.b +if(s==null)return A.bv(A.i([],t.Z),B.F,null,null) +return A.bv(s,this.a,b,c)}, +dc(a,b){return this.fG(null,a,b)}, +aK(){var s,r=this.b +r.toString +s=this.c++ +if(!(s>=0&&sq)s=q-r +return J.dS(B.k.ga9(o),p.b.byteOffset+p.c,s)}} +A.iO.prototype={ +a5(){var s=this.aK(),r=this.aK() +if(this.a===B.aU)return(s<<8|r)>>>0 +return(r<<8|s)>>>0}, +ak(){var s=this,r=s.aK(),q=s.aK(),p=s.aK(),o=s.aK() +if(s.a===B.aU)return(r<<24|q<<16|p<<8|o)>>>0 +return(o<<24|p<<16|q<<8|r)>>>0}, +bz(){var s=this,r=s.aK(),q=s.aK(),p=s.aK(),o=s.aK(),n=s.aK(),m=s.aK(),l=s.aK(),k=s.aK() +if(s.a===B.aU)return(B.f.bp(r,56)|B.f.bp(q,48)|B.f.bp(p,40)|B.f.bp(o,32)|n<<24|m<<16|l<<8|k)>>>0 +return(B.f.bp(k,56)|B.f.bp(l,48)|B.f.bp(m,40)|B.f.bp(n,32)|o<<24|p<<16|q<<8|r)>>>0}, +be(a){var s=this,r=s.dc(a,s.c) +s.c=s.c+r.gn(0) +return r}, +is(a,b){return new A.mI(b).$1(this.be(a).aF())}, +dV(a){return this.is(a,!0)}} +A.mI.prototype={ +$1(a){var s,r,q +t.L.a(a) +try{s=this.a?B.hV.bL(a):A.aA(a,0,null) +return s}catch(r){q=A.aA(a,0,null) +return q}}, +$S:120} +A.fy.prototype={ +e_(){return J.dS(B.k.ga9(this.c),this.c.byteOffset,this.b)}, +cA(a){var s,r,q=this +if(q.b===q.c.length)q.ko() +s=q.c +r=q.b++ +s.$flags&2&&A.t(s) +if(!(r>=0&&ro)n.dh(q-o) +B.k.bD(p,r,q,a) +n.b+=s}, +oy(a){var s,r,q,p,o,n,m=this +for(;;){s=m.b +r=a.b +q=r==null +p=q?0:r.length-a.c +o=m.c +n=o.length +if(!(s+p>n))break +m.dh(s+(q?0:r.length-a.c)-n)}if(!q)B.k.bb(o,s,s+a.gn(0),r,a.c) +m.b=m.b+a.gn(0)}, +ov(a,b){var s,r,q,p,o,n,m,l,k,j,i=this +while(s=i.b,r=s+b,q=i.c,p=q.length,r>p)i.dh(r-p) +o=s-a +if(a>=b)B.k.bb(q,s,r,q,o) +else for(n=q.$flags|0,m=o;s=0&&m=0))return A.c(q,s) +q[s]=j}i.b+=b}, +dh(a){var s,r=this.c,q=r.length,p=q+(a==null?1:a),o=q===0?32768:q*2 +if(o=0;)++r +return r}, +ag(a,b){var s,r,q,p,o,n +A.aF(b,"index") +s=this.a +r=s.length +q=0 +if(r!==0){p=new A.cP(s,r,0,240) +for(o=0;n=p.cX(),n>=0;o=n){if(q===b)return B.b.t(s,o,n);++q}}throw A.f(A.vR(b,this,"index",null,q))}, +C(a,b){var s +if(typeof b!="string")return!1 +s=b.length +if(s===0)return!1 +if(new A.cP(b,s,0,240).cX()!==s)return!1 +s=this.a +return A.y4(s,b,0,s.length)>=0}, +hr(a,b,c){var s,r +if(a===0||b===this.a.length)return b +s=this.a +c=new A.cP(s,s.length,b,240) +do{r=c.cX() +if(r<0)break +if(--a,a>0){b=r +continue}else{b=r +break}}while(!0) +return b}, +aX(a,b){A.aF(b,"count") +return this.kY(b)}, +kY(a){var s=this.hr(a,0,null),r=this.a +if(s===r.length)return B.hT +return new A.d3(B.b.ab(r,s))}, +bk(a,b){A.aF(b,"count") +return this.l2(b)}, +l2(a){var s=this.hr(a,0,null),r=this.a +if(s===r.length)return this +return new A.d3(B.b.t(r,0,s))}, +v(a,b){if(b==null)return!1 +return b instanceof A.d3&&this.a===b.a}, +gq(a){return B.b.gq(this.a)}, +j(a){return this.a}} +A.fR.prototype={ +gB(){var s=this,r=s.d +return r==null?s.d=B.b.t(s.a,s.b,s.c):r}, +p(){return this.fR(1,this.c)}, +fR(a,b){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=u.j,f=u.e,e=u.U +if(a>0){s=h.c +for(r=h.a,q=r.length,p=240;s=0))return A.c(r,s) +o=r.charCodeAt(s) +n=o^55296 +m=s+1 +if(n>1023){l=o>>>5 +if(!(l<6144))return A.c(g,l) +k=g.charCodeAt(l)+(o&31) +if(!(k<10964))return A.c(f,k) +j=f.charCodeAt(k)}else{j=1 +if(m>>8)+(n<<2>>>0)) +if(!(l<6144))return A.c(g,l) +l=g.charCodeAt(l)+(i&255) +if(!(l<10964))return A.c(f,l) +j=f.charCodeAt(l)}}}l=(p&-4)+j +if(!(l>=0&&l<500))return A.c(e,l) +p=e.charCodeAt(l) +if((p&1)!==0){--a +l=a===0}else l=!1 +if(l){h.b=b +h.c=s +h.d=null +return!0}}h.b=b +h.c=q +h.d=null +return a===1&&p!==240}else{h.b=b +h.d=null +return!0}}, +$iL:1} +A.cP.prototype={ +cX(){var s,r,q=this,p=u.U +for(s=q.b;r=q.c,r=0&&i1023){j=n.d +i=s>>>5 +if(!(i<6144))return A.c(m,i) +q=m.charCodeAt(i)+(s&31) +if(!(q<10964))return A.c(l,q) +j=(j&-4)+l.charCodeAt(q) +if(!(j<500))return A.c(k,j) +n.d=k.charCodeAt(j) +return}if(h=0&&h>>8)+(r<<2>>>0)) +if(!(j<6144))return A.c(m,j) +j=m.charCodeAt(j)+(p&255) +if(!(j<10964))return A.c(l,j) +o=l.charCodeAt(j) +n.c=h+1}else o=1 +j=(n.d&-4)+o +if(!(j<500))return A.c(k,j) +n.d=k.charCodeAt(j)}, +l3(a){var s,r,q,p,o,n,m,l,k,j,i=this,h=u.j,g=u.e,f=u.U,e=i.c +if(e===a){i.d=240 +return e}s=e-1 +r=i.a +q=r.length +if(!(s>=0&&s2047){e=p>>>5 +if(!(e<6144))return A.c(h,e) +n=h.charCodeAt(e)+(p&31) +if(!(n<10964))return A.c(g,n) +e=280+g.charCodeAt(n) +if(!(e<500))return A.c(f,e) +i.d=f.charCodeAt(e) +return s}m=1 +if(o>1023){l=s-1 +o&=1023 +if(l>=a){if(!(l>=0&&l>>8)+(k<<2>>>0)) +if(!(e<6144))return A.c(h,e) +e=h.charCodeAt(e)+(o&255) +if(!(e<10964))return A.c(g,e) +m=g.charCodeAt(e) +s=l}}else{if(e=0&&e>>8)+(o<<2>>>0)) +if(!(e<6144))return A.c(h,e) +e=h.charCodeAt(e)+(j&255) +if(!(e<10964))return A.c(g,e) +m=g.charCodeAt(e)}}e=280+m +if(!(e<500))return A.c(f,e) +i.d=f.charCodeAt(e) +return s}} +A.lI.prototype={ +da(){var s,r,q,p,o,n=this,m=u.j,l=u.e,k=u.t,j=n.a,i=--n.c,h=j.length +if(!(i>=0&&i1023){j=s>>>5 +if(!(j<6144))return A.c(m,j) +q=m.charCodeAt(j)+(s&31) +if(!(q<10964))return A.c(l,q) +j=(n.d&-4)+l.charCodeAt(q) +if(!(j<380))return A.c(k,j) +n.d=k.charCodeAt(j) +return}if(i>=n.b){i=n.c=i-1 +if(!(i>=0&&i>>8)+(p<<2>>>0)) +if(!(j<6144))return A.c(m,j) +j=m.charCodeAt(j)+(r&255) +if(!(j<10964))return A.c(l,j) +o=l.charCodeAt(j)}else{n.c=i+1 +o=1}j=(n.d&-4)+o +if(!(j<380))return A.c(k,j) +n.d=k.charCodeAt(j)}, +kz(){var s,r,q=this,p=u.t +for(s=q.b;r=q.c,r>s;){q.da() +if(q.d<280)return r}r=(q.d&-4)+18 +if(!(r<380))return A.c(p,r) +q.d=p.charCodeAt(r) +return s}} +A.eR.prototype={ +aI(a,b){return J.N(a,b)}, +Y(a){return J.B(a)}, +$ibS:1} +A.e2.prototype={ +aI(a,b){var s,r,q,p=this.$ti.h("h<1>?") +p.a(a) +p.a(b) +if(a===b)return!0 +s=J.at(a) +r=J.at(b) +for(p=this.a;;){q=s.p() +if(q!==r.p())return!1 +if(!q)return!0 +if(!p.aI(s.gB(),r.gB()))return!1}}, +Y(a){var s,r,q +this.$ti.h("h<1>?").a(a) +for(s=J.at(a),r=this.a,q=0;s.p();){q=q+r.Y(s.gB())&2147483647 +q=q+(q<<10>>>0)&2147483647 +q^=q>>>6}q=q+(q<<3>>>0)&2147483647 +q^=q>>>11 +return q+(q<<15>>>0)&2147483647}, +$ibS:1} +A.cX.prototype={ +aI(a,b){var s,r,q,p,o=this.$ti.h("m<1>?") +o.a(a) +o.a(b) +if(a===b)return!0 +o=J.ad(a) +s=o.gn(a) +r=J.ad(b) +if(s!==r.gn(b))return!1 +for(q=this.a,p=0;p?").a(a) +for(s=J.ad(a),r=this.a,q=0,p=0;p>>0)&2147483647 +q^=q>>>6}q=q+(q<<3>>>0)&2147483647 +q^=q>>>11 +return q+(q<<15>>>0)&2147483647}, +$ibS:1} +A.bE.prototype={ +aI(a,b){var s,r,q,p,o=A.x(this),n=o.h("bE.T?") +n.a(a) +n.a(b) +if(a===b)return!0 +n=this.a +s=A.rr(o.h("A(bE.E,bE.E)").a(n.gar()),o.h("b(bE.E)").a(n.gdM()),n.gnj(),o.h("bE.E"),t.S) +for(o=J.at(a),r=0;o.p();){q=o.gB() +p=s.m(0,q) +s.k(0,q,(p==null?0:p)+1);++r}for(o=J.at(b);o.p();){q=o.gB() +p=s.m(0,q) +if(p==null||p===0)return!1 +s.k(0,q,p-1);--r}return r===0}, +Y(a){var s,r,q +A.x(this).h("bE.T?").a(a) +for(s=J.at(a),r=this.a,q=0;s.p();)q=q+r.Y(s.gB())&2147483647 +q=q+(q<<3>>>0)&2147483647 +q^=q>>>11 +return q+(q<<15>>>0)&2147483647}, +$ibS:1} +A.ei.prototype={} +A.ey.prototype={ +gq(a){var s=this.a +return 3*s.a.Y(this.b)+7*s.b.Y(this.c)&2147483647}, +v(a,b){var s +if(b==null)return!1 +if(b instanceof A.ey){s=this.a +s=s.a.aI(this.b,b.b)&&s.b.aI(this.c,b.c)}else s=!1 +return s}} +A.e9.prototype={ +aI(a,b){var s,r,q,p,o=this.$ti.h("d<1,2>?") +o.a(a) +o.a(b) +if(a===b)return!0 +if(a.gn(a)!==b.gn(b))return!1 +s=A.rr(null,null,null,t.fA,t.S) +for(o=a.gaR(),o=o.gF(o);o.p();){r=o.gB() +q=new A.ey(this,r,a.m(0,r)) +p=s.m(0,q) +s.k(0,q,(p==null?0:p)+1)}for(o=b.gaR(),o=o.gF(o);o.p();){r=o.gB() +q=new A.ey(this,r,b.m(0,r)) +p=s.m(0,q) +if(p==null||p===0)return!1 +s.k(0,q,p-1)}return!0}, +Y(a){var s,r,q,p,o,n,m,l=this.$ti +l.h("d<1,2>?").a(a) +for(s=a.gaR(),s=s.gF(s),r=this.a,q=this.b,l=l.y[1],p=0;s.p();){o=s.gB() +n=r.Y(o) +m=a.m(0,o) +p=p+3*n+7*q.Y(m==null?l.a(m):m)&2147483647}p=p+(p<<3>>>0)&2147483647 +p^=p>>>11 +return p+(p<<15>>>0)&2147483647}, +$ibS:1} +A.eQ.prototype={ +aI(a,b){var s=this,r=t.hj +if(r.b(a))return r.b(b)&&new A.ei(s,t.cu).aI(a,b) +r=t.av +if(r.b(a))return r.b(b)&&new A.e9(s,s,t.a3).aI(a,b) +r=t.p +if(r.b(a))return r.b(b)&&new A.cX(s,t.hI).aI(a,b) +r=t.e7 +if(r.b(a))return r.b(b)&&new A.e2(s,t.nZ).aI(a,b) +return J.N(a,b)}, +Y(a){var s=this +if(t.hj.b(a))return new A.ei(s,t.cu).Y(a) +if(t.av.b(a))return new A.e9(s,s,t.a3).Y(a) +if(t.p.b(a))return new A.cX(s,t.hI).Y(a) +if(t.e7.b(a))return new A.e2(s,t.nZ).Y(a) +return J.B(a)}, +nk(a){return!0}, +$ibS:1} +A.ev.prototype={ +C(a,b){return B.a.C(this.a,b)}, +ag(a,b){var s=this.a +if(!(b>=0&&b"))}, +gn(a){return this.a.length}, +c8(a,b,c){var s=this.a,r=A.w(s) +return new A.Q(s,r.u(c).h("1(2)").a(this.$ti.u(c).h("1(2)").a(b)),r.h("@<1>").u(c).h("Q<1,2>"))}, +aX(a,b){var s=this.a +return A.bX(s,b,null,A.w(s).c)}, +bk(a,b){var s=this.a +return A.bX(s,0,A.dP(b,"count",t.S),A.w(s).c)}, +iG(a,b){return new A.O(this.a,b.h("O<0>"))}, +j(a){return A.iT(this.a,"[","]")}, +$ih:1} +A.dY.prototype={ +m(a,b){var s=this.a +if(!(b>=0&&b").a(b))}, +giz(a){var s=this.a +return new A.X(s,A.w(s).h("X<1>"))}, +bV(a,b){B.a.bV(this.a,this.$ti.h("b(1,1)?").a(b))}, +$iz:1, +$im:1} +A.kR.prototype={ +an(){var s=this,r=s.d +r===$&&A.o() +s.c=r +s.d=s.a.bP(!1) +return r}, +hf(a,b){var s=this,r=s.d +r===$&&A.o() +if(r.a===a){s.c=r +s.d=s.a.bP(!1) +return!0}else return!1}, +dm(a){return this.hf(a,!1)}, +aM(a){if(!this.hf(a,!1))this.eg(A.t0(a))}, +eg(a){var s,r=this.an(),q=null +try{q="expected "+a+", but found "+A.k(r)}catch(s){q="parsing error expected "+a}this.ci(q,r.b)}, +ci(a,b){$.eE.aY().n0(a,b)}, +ae(a){var s=this.c +if(s==null||s.b.ai(0,a)<0)return a +return a.aO(0,this.c.b)}, +ip(){var s,r,q=this,p=A.i([],t.fG),o=q.d +o===$&&A.o() +s=q.a +s.e=!0 +do{r=q.io() +if(r!=null)B.a.l(p,r)}while(q.dm(19)) +s.e=!1 +if(p.length!==0)return new A.jL(p,q.ae(o.b)) +return null}, +io(){var s,r=A.i([],t.iM),q=this.d +q===$&&A.o() +for(;;){s=this.jm(r.length===0) +if(s!=null)B.a.l(r,s) +else break}if(r.length===0)return null +return new A.d_(r,this.ae(q.b))}, +nM(){var s,r,q,p,o,n,m,l=this.io() +if(l!=null)for(s=l.b,r=s.length,q=$.eE.a,p=0;p10)r=B.b.t(r,0,8)+"..." +return s+"("+r+")"}else return s}} +A.iz.prototype={ +gZ(){return this.c}} +A.jX.prototype={ +bP(a){var s,r,q,p,o,n,m,l,k,j=this +j.r=j.f +s=j.cl() +switch(s){case 10:case 13:case 32:case 9:return j.n5() +case 0:return new A.I(1,j.a.K(j.r,j.f)) +case 64:r=j.cm() +if(A.jY(r)||r===45){q=j.f +p=j.r +j.r=q +j.cl() +j.dI() +o=j.b +n=j.r +m=A.ql(B.j2,"type",o,n,j.f-n) +if(m===-1){n=j.r +m=A.ql(B.iY,"type",o,n,j.f-n)}if(m!==-1)return new A.I(m,j.a.K(j.r,j.f)) +else{j.r=p +j.f=q}}return new A.I(10,j.a.K(j.r,j.f)) +case 46:l=j.r +if(j.ns()){o=j.a +if(j.dJ().a===60){j.r=l +return new A.I(62,o.K(l,j.f))}else return new A.I(65,o.K(j.r,j.f))}return new A.I(8,j.a.K(j.r,j.f)) +case 40:return new A.I(2,j.a.K(j.r,j.f)) +case 41:return new A.I(3,j.a.K(j.r,j.f)) +case 123:return new A.I(6,j.a.K(j.r,j.f)) +case 125:return new A.I(7,j.a.K(j.r,j.f)) +case 91:return new A.I(4,j.a.K(j.r,j.f)) +case 93:if(j.af(93)&&j.af(62))return j.c9() +return new A.I(5,j.a.K(j.r,j.f)) +case 35:return new A.I(11,j.a.K(j.r,j.f)) +case 43:if(j.hi(s))return j.dJ() +return new A.I(12,j.a.K(j.r,j.f)) +case 45:o=j.d +if(o)return new A.I(34,j.a.K(j.r,j.f)) +else if(j.hi(s))return j.dJ() +else if(A.jY(s)||s===45)return j.dI() +return new A.I(34,j.a.K(j.r,j.f)) +case 62:return new A.I(13,j.a.K(j.r,j.f)) +case 126:if(j.af(61))return new A.I(530,j.a.K(j.r,j.f)) +return new A.I(14,j.a.K(j.r,j.f)) +case 42:if(j.af(61))return new A.I(534,j.a.K(j.r,j.f)) +return new A.I(15,j.a.K(j.r,j.f)) +case 38:return new A.I(36,j.a.K(j.r,j.f)) +case 124:if(j.af(61))return new A.I(531,j.a.K(j.r,j.f)) +return new A.I(16,j.a.K(j.r,j.f)) +case 58:return new A.I(17,j.a.K(j.r,j.f)) +case 44:return new A.I(19,j.a.K(j.r,j.f)) +case 59:return new A.I(9,j.a.K(j.r,j.f)) +case 37:return new A.I(24,j.a.K(j.r,j.f)) +case 39:return new A.I(25,j.a.K(j.r,j.f)) +case 34:return new A.I(26,j.a.K(j.r,j.f)) +case 47:if(j.af(42))return j.n4() +return new A.I(27,j.a.K(j.r,j.f)) +case 60:if(j.af(33))if(j.af(45)&&j.af(45))return j.n3() +else{o=!1 +if(j.af(91)){n=j.Q.a +k=n.length +if(0>=k)return A.c(n,0) +if(j.af(n.charCodeAt(0))){if(1>=k)return A.c(n,1) +if(j.af(n.charCodeAt(1))){if(2>=k)return A.c(n,2) +if(j.af(n.charCodeAt(2))){if(3>=k)return A.c(n,3) +if(j.af(n.charCodeAt(3))){if(4>=k)return A.c(n,4) +o=j.af(n.charCodeAt(4))&&j.af(91)}}}}}if(o)return j.c9()}return new A.I(32,j.a.K(j.r,j.f)) +case 61:return new A.I(28,j.a.K(j.r,j.f)) +case 94:if(j.af(61))return new A.I(532,j.a.K(j.r,j.f)) +return new A.I(30,j.a.K(j.r,j.f)) +case 36:if(j.af(61))return new A.I(533,j.a.K(j.r,j.f)) +return new A.I(31,j.a.K(j.r,j.f)) +case 33:return j.dI() +default:if(!j.e&&s===92)return new A.I(35,j.a.K(j.r,j.f)) +if(j.c)o=(s===j.w||s===j.x)&&j.cm()===j.y +else o=!1 +if(o){j.cl() +o=j.r=j.f +return new A.I(508,j.a.K(o,o))}else{o=s===118 +if(o&&j.af(97)&&j.af(114)&&j.af(45))return new A.I(400,j.a.K(j.r,j.f)) +else if(o&&j.af(97)&&j.af(114)&&j.cm()===45)return new A.I(401,j.a.K(j.r,j.f)) +else if(A.jY(s)||s===45)return j.dI() +else if(s>=48&&s<=57)return j.dJ()}return new A.I(65,j.a.K(j.r,j.f))}}, +c9(){return this.bP(!1)}, +dI(){var s,r,q,p,o,n,m,l,k,j=this,i=A.i([],t.Z),h=j.f +j.f=j.r +r=j.b +s=r.length +for(;;){q=j.f +if(!(q=0))return A.c(r,q) +p=r.charCodeAt(q) +if(p===92&&j.c){o=j.f=q+1 +j.mQ(o+6) +q=j.f +if(q!==o){B.a.l(i,A.lA("0x"+B.b.t(r,o,q),null)) +q=j.f +if(q===s){s=q +break}if(!(q>=0&&q=0&&q=h)if(j.d){if(!A.jY(p))n=p>=48&&p<=57}else{if(!A.jY(p))n=p>=48&&p<=57 +else n=!0 +n=n||p===45}if(n){B.a.l(i,p);++j.f}else{s=q +break}}}m=j.a.K(j.r,s) +l=A.aA(i,0,null) +if(!j.d&&!j.e){s=j.r +k=A.ql(B.d1,"unit",r,s,j.f-s)}else k=-1 +if(k===-1)k=B.b.t(r,j.r,j.f)==="!important"?505:-1 +return new A.iz(l,k>=0?k:511,m)}, +dJ(){var s,r=this +r.i4() +if(r.cm()===46){r.cl() +s=r.cm() +if(s>=48&&s<=57){r.i4() +return new A.I(62,r.a.K(r.r,r.f))}else --r.f}return new A.I(60,r.a.K(r.r,r.f))}, +ns(){var s=this.f,r=this.b,q=r.length +if(s=0))return A.c(r,s) +r=r.charCodeAt(s) +r=r>=48&&r<=57}else r=!1 +if(r){this.f=s+1 +return!0}return!1}, +mQ(a){var s,r,q,p=this.b,o=p.length +a=Math.min(a,o) +while(s=this.f,s=0&&s=48&&r<=57))if(!(r>=97&&r<=102))r=r>=65&&r<=70 +else r=q +else r=q +if(r)this.f=s+1 +else return}}, +n3(){var s,r,q,p,o,n=this +for(;;){s=n.cl() +if(s===0){r=n.a +q=n.r +p=n.f +o=new A.aw(r,q,p) +o.aG(r,q,p) +return new A.I(67,o)}else if(s===45)if(n.af(45))if(n.af(62))if(n.c)return n.c9() +else{r=n.a +q=n.r +p=n.f +o=new A.aw(r,q,p) +o.aG(r,q,p) +return new A.I(504,o)}}}, +n4(){var s,r,q,p,o,n=this +for(;;){s=n.cl() +if(s===0){r=n.a +q=n.r +p=n.f +o=new A.aw(r,q,p) +o.aG(r,q,p) +return new A.I(67,o)}else if(s===42)if(n.af(47))if(n.c)return n.c9() +else{r=n.a +q=n.r +p=n.f +o=new A.aw(r,q,p) +o.aG(r,q,p) +return new A.I(64,o)}}}} +A.nO.prototype={ +cl(){var s=this.f,r=this.b,q=r.length +if(s=0))return A.c(r,s) +return r.charCodeAt(s)}else return 0}, +hl(a){var s=this.f+a,r=this.b,q=r.length +if(s=0))return A.c(r,s) +return r.charCodeAt(s)}else return 0}, +cm(){return this.hl(0)}, +af(a){var s=this.f,r=this.b,q=r.length +if(s=0))return A.c(r,s) +if(r.charCodeAt(s)===a){this.f=s+1 +return!0}else return!1}else return!1}, +hi(a){var s,r +if(a>=48&&a<=57)return!0 +s=this.cm() +if(a===46)return s>=48&&s<=57 +if(a===43||a===45){if(!(s>=48&&s<=57))if(s===46){r=this.hl(1) +r=r>=48&&r<=57}else r=!1 +else r=!0 +return r}return!1}, +n5(){var s,r,q,p,o=this,n=--o.f +for(s=o.b,r=s.length;n=0))return A.c(s,n) +p=s.charCodeAt(n) +if(!(p===32||p===9||p===13))if(p===10){if(!o.c){n=o.a +s=o.r +r=new A.aw(n,s,q) +r.aG(n,s,q) +return new A.I(63,r)}}else{n=o.f=q-1 +if(o.c)return o.c9() +else{s=o.a +r=o.r +q=new A.aw(s,r,n) +q.aG(s,r,n) +return new A.I(63,q)}}}return new A.I(1,o.a.K(o.r,n))}, +i4(){var s,r,q,p +for(s=this.b,r=s.length;q=this.f,q=0))return A.c(s,q) +p=s.charCodeAt(q) +if(p>=48&&p<=57)this.f=q+1 +else return}}} +A.ec.prototype={ +bn(){return"MessageLevel."+this.b}} +A.eb.prototype={ +j(a){var s=this,r=s.d&&B.dZ.a7(s.a),q=r?B.dZ.m(0,s.a):null,p=r?A.k(q):"" +p=p+A.k(B.pd.m(0,s.a))+" " +if(r)p+="\x1b[0m" +p=p+"on "+s.c.ig(s.b,q) +return p.charCodeAt(0)==0?p:p}} +A.j5.prototype={ +n0(a,b){var s=new A.eb(B.by,a,b,this.b.w) +B.a.l(this.c,s) +this.a.$1(s)}} +A.ns.prototype={} +A.cs.prototype={ +M(a){return null}, +j(a){var s=this.a +s=A.aA(B.aA.am(s.a.c,s.b,s.c),0,null) +return s}, +ga8(){return this.b}} +A.d4.prototype={ +M(a){return null}, +ga8(){return"*"}} +A.jV.prototype={ +M(a){return null}, +ga8(){return"&"}} +A.je.prototype={ +M(a){return null}, +ga8(){return"not"}} +A.jL.prototype={ +M(a){return B.a.aH(this.b,a.gfn())}} +A.d_.prototype={ +gn(a){return this.b.length}, +M(a){return a.iF(this)}} +A.fL.prototype={ +M(a){this.c.M(a) +return null}, +j(a){return this.c.b.ga8()}} +A.bc.prototype={ +ga8(){return this.b.ga8()}, +M(a){return t.in.a(this.b).M(a)}} +A.di.prototype={ +M(a){var s=this.b +return s instanceof A.d4||a.a.x===s.ga8().toLowerCase()}, +j(a){return this.b.ga8()}} +A.j6.prototype={ +gih(){var s=this.d +if(s instanceof A.d4)s="*" +else s=s==null?"":t.gx.a(s).b +return s}, +M(a){return a.on(this)}, +j(a){return this.gih()+"|"+t.g9.a(this.b).b.ga8()}} +A.hW.prototype={ +nq(){var s,r=this.d +A:{if(28===r){s="=" +break A}if(530===r){s="~=" +break A}if(531===r){s="|=" +break A}if(532===r){s="^=" +break A}if(533===r){s="$=" +break A}if(534===r){s="*=" +break A}if(535===r){s="" +break A}s=null +break A}return s}, +oi(){var s=this.e +if(s!=null)if(s instanceof A.cs)return s.j(0) +else return'"'+A.k(s)+'"' +else return""}, +M(a){return a.oj(this)}, +j(a){return"["+this.b.ga8()+A.k(this.nq())+this.oi()+"]"}} +A.iy.prototype={ +M(a){return a.a.geW()===this.b.ga8()}, +j(a){return"#"+A.k(this.b)}} +A.i3.prototype={ +M(a){var s,r=a.a +r.toString +s=this.b.ga8() +return new A.ia(r).d0().C(0,s)}, +j(a){return"."+A.k(this.b)}} +A.ed.prototype={ +M(a){return a.op(this)}, +j(a){return":"+this.b.ga8()}} +A.ee.prototype={ +M(a){a.or(this) +return!1}, +j(a){var s=this.d?":":"::" +return s+this.b.ga8()}} +A.fD.prototype={ +M(a){return a.oo(this)}} +A.jE.prototype={ +M(a){return a.oq(this)}} +A.eh.prototype={ +M(a){a.l4(this.b) +return null}} +A.jf.prototype={ +M(a){return!A.hA(this.d.M(a))}} +A.jo.prototype={ +M(a){return null}} +A.jn.prototype={ +M(a){return null}} +A.al.prototype={ +M(a){return null}} +A.jm.prototype={ +M(a){return null}} +A.bA.prototype={ +M(a){return null}, +j(a){return this.d+A.k(A.wS(this.f))}} +A.j0.prototype={ +M(a){return null}} +A.jz.prototype={ +M(a){return null}} +A.ib.prototype={ +M(a){return null}} +A.is.prototype={ +M(a){return null}} +A.hN.prototype={ +M(a){return null}} +A.jW.prototype={ +M(a){return null}} +A.iw.prototype={ +M(a){return null}} +A.iv.prototype={ +M(a){return null}} +A.jI.prototype={ +M(a){return null}} +A.i1.prototype={ +M(a){return null}} +A.jG.prototype={ +M(a){return null}} +A.j1.prototype={ +M(a){return null}} +A.k6.prototype={ +M(a){return null}} +A.R.prototype={} +A.ao.prototype={} +A.k7.prototype={ +l4(a){var s +t.lR.a(a) +for(s=0;s>>0}, +v(a,b){var s=this +if(b==null)return!1 +t.gF.a(b) +if(s===b)return!0 +return b.a.v(0,s.a)&&b.b.v(0,s.b)&&b.c===s.c}} +A.ma.prototype={ +$1(a){A.q(a) +return!0}, +$S:4} +A.mb.prototype={ +$0(){return""}, +$S:8} +A.mc.prototype={ +$1(a){return t.fj.a(a).a}, +$S:70} +A.lM.prototype={ +$1(a){var s,r +t.A.a(a) +s=this.a +r=this.b +if(!(r")),r=r.c,q=null,p=null,o=null;s.p();){n=s.d +if(n==null)n=r.a(n) +m=n.b +switch(n.a.ga_().toLowerCase()){case"name":q=m +break +case"content":p=m +break +case"scheme":o=m +break}}if(q==null||q.length===0)throw A.f(A.S("Incorrect EPUB navigation meta: meta name is missing.")) +if(p==null)throw A.f(A.S("Incorrect EPUB navigation meta: meta content is missing.")) +B.a.l(this.a,new A.f5(q,p,o))}}, +$S:2} +A.mU.prototype={ +$1(a){return t.q.a(a)!=null}, +$S:5} +A.mW.prototype={ +$1(a){t.P.a(a) +if(a.b.ga_().toLowerCase()==="navpoint")B.a.l(this.a,A.rH(a))}, +$S:2} +A.mV.prototype={ +$1(a){t.P.a(a) +if(a.b.ga_().toLowerCase()==="li")B.a.l(this.a,A.wi(a))}, +$S:2} +A.mX.prototype={ +$1(a){t.P.a(a) +switch(a.b.ga_().toLowerCase()){case"navlabel":B.a.l(this.a,A.mT(a)) +break +case"content":A.qb(a) +break}}, +$S:2} +A.mZ.prototype={ +$1(a){t.P.a(a) +switch(a.b.ga_().toLowerCase()){case"navlabel":B.a.l(this.b,A.mT(a)) +break +case"content":this.a.a=A.qb(a) +break +case"navpoint":B.a.l(this.c,A.rH(a)) +break}}, +$S:2} +A.mY.prototype={ +$1(a){var s,r,q,p +t.P.a(a) +switch(a.b.ga_().toLowerCase()){case"a":case"span":B.a.l(this.b,new A.cS(B.b.ba(A.cH(a)))) +this.a.a=A.wa(a) +break +case"ol":for(s=A.rG(a).a,r=s.length,q=this.c,p=0;p")),r=r.c,q=null,p=null,o=null;s.p();){n=s.d +if(n==null)n=r.a(n) +m=n.b +switch(n.a.ga_().toLowerCase()){case"type":q=m +break +case"title":p=m +break +case"href":o=m +break}}if(q==null||q.length===0)throw A.f(A.S("Incorrect EPUB guide: item type is missing")) +if(o==null||o.length===0)throw A.f(A.S("Incorrect EPUB guide: item href is missing")) +B.a.l(this.a,new A.eZ(q,p,o))}}, +$S:2} +A.n9.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=null +t.P.a(a) +if(a.b.ga_().toLowerCase()==="item"){for(s=a.y$.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c,q=f,p=q,o=p,n=o,m=n,l=m,k=l,j=k,i=j;s.p();){h=s.d +if(h==null)h=r.a(h) +g=h.b +switch(h.a.ga_().toLowerCase()){case"id":i=g +break +case"href":j=g +break +case"media-type":k=g +break +case"media-overlay":l=g +break +case"required-namespace":m=g +break +case"required-modules":n=g +break +case"fallback":o=g +break +case"fallback-style":p=g +break +case"properties":q=g +break}}if(i==null||i.length===0)throw A.f(A.S("Incorrect EPUB manifest: item ID is missing")) +if(j==null||j.length===0)throw A.f(A.S("Incorrect EPUB manifest: item href is missing")) +if(k==null||k.length===0)throw A.f(A.S("Incorrect EPUB manifest: item media type is missing")) +B.a.l(this.a,new A.dk(i,j,k,l,m,n,o,p,q))}}, +$S:2} +A.na.prototype={ +$1(a){var s,r,q,p,o,n,m=this +t.P.a(a) +s=A.cH(a) +r=a.b +q=r.ga_().toLowerCase() +A:{if("title"===q){r=B.a.l(m.b,s) +break A}if("creator"===q){r=B.a.l(m.c,A.wp(a)) +break A}if("subject"===q){r=B.a.l(m.d,s) +break A}if("description"===q){m.a.a=s +r=s +break A}if("publisher"===q){r=B.a.l(m.e,s) +break A}if("contributor"===q){r=B.a.l(m.f,A.wo(a)) +break A}if("date"===q){p=a.fq("event",r.gcV()) +o=p!=null&&p.length!==0?p:null +r=B.a.l(m.r,new A.f0(A.cH(a),o)) +break A}if("type"===q){r=B.a.l(m.w,s) +break A}if("format"===q){r=B.a.l(m.x,s) +break A}if("identifier"===q){r=B.a.l(m.y,A.wq(a)) +break A}if("source"===q){r=B.a.l(m.z,s) +break A}if("language"===q){r=B.a.l(m.Q,s) +break A}if("relation"===q){r=B.a.l(m.as,s) +break A}if("coverage"===q){r=B.a.l(m.at,s) +break A}if("rights"===q){r=B.a.l(m.ax,s) +break A}n="meta"===q +if(n&&m.ay===B.bG){r=B.a.l(m.ch,A.wr(a)) +break A}if(n&&m.ay===B.cT){r=B.a.l(m.ch,A.ws(a)) +break A}r=null +break A}return r}, +$S:2} +A.nb.prototype={ +$1(a){return t.u.a(a).a===this.a}, +$S:9} +A.nc.prototype={ +$1(a){return t.q.a(a)!=null}, +$S:5} +A.nd.prototype={ +$1(a){return t.q.a(a)!=null}, +$S:5} +A.ne.prototype={ +$1(a){return t.q.a(a)!=null}, +$S:5} +A.nf.prototype={ +$1(a){return t.q.a(a)!=null}, +$S:5} +A.ng.prototype={ +$1(a){return t.q.a(a)!=null}, +$S:5} +A.nh.prototype={ +$1(a){var s,r,q +t.P.a(a) +if(a.b.ga_().toLowerCase()==="itemref"){s=a.cd("idref") +if(s==null||s.length===0)throw A.f(A.S("Incorrect EPUB spine: item ID ref is missing")) +r=a.cd("linear") +q=r==null||r.toLowerCase()==="no" +B.a.l(this.a,new A.fa(s,q))}}, +$S:2} +A.nD.prototype={ +$1(a){return t.u.a(a).a==="META-INF/container.xml"}, +$S:9} +A.nE.prototype={ +$1(a){return t.q.a(a)!=null}, +$S:5} +A.nF.prototype={ +$1(a){t.I.a(a) +return a instanceof A.aG&&"rootfile"===a.b.ga_()}, +$S:29} +A.eY.prototype={ +gq(a){var s=this +return(B.b.gq(s.b)^B.b.gq(s.c)^A.dy(s.d)^s.e.gq(0)^J.B(s.f))>>>0}, +v(a,b){var s=this +if(b==null)return!1 +t.gw.a(b) +if(s===b)return!0 +return b.b===s.b&&b.c===s.c&&B.l.gar().$2(b.d,s.d)&&b.e.v(0,s.e)&&J.N(b.f,s.f)}} +A.bg.prototype={} +A.bu.prototype={ +gq(a){var s=this,r=J.B(s.a),q=B.b.gq(s.b),p=B.b.gq(s.c),o=J.B(s.d),n=B.l.gdM().$1(s.e) +if(typeof n!=="number")return A.aN(n) +return(r^q^p^o^n)>>>0}, +v(a,b){var s=this +if(b==null)return!1 +t.k5.a(b) +if(s===b)return!0 +return J.N(b.a,s.a)&&b.b===s.b&&b.c===s.c&&b.d==s.d&&B.l.gar().$2(b.e,s.e)}, +fb(){var s=0,r=A.br(t.N),q,p=this +var $async$fb=A.bs(function(a,b){if(a===1)return A.bo(b,r) +for(;;)switch(s){case 0:q=p.a.dU() +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$fb,r)}, +j(a){return"Title: "+this.b+", Subchapter count: "+this.e.length}} +A.dj.prototype={ +gq(a){var s=this +return(s.a.gq(0)^B.b.gq(s.b)^J.B(s.c)^B.b.gq(s.d))>>>0}, +v(a,b){var s=this +if(b==null)return!1 +if(s===b)return!0 +return b instanceof A.dj&&b.b===s.b&&b.c==s.c&&b.d===s.d}, +ft(){var s=this.a,r=A.qr(s.e.c,this.b),q=A.bI(new A.cE(s.a.a,t.bW),new A.lU(r),t.u) +if(q==null)throw A.f(A.S("EPUB parsing error: file "+r+" not found in archive.")) +return q}, +f3(a){var s=0,r=A.br(t.L),q,p=this,o,n +var $async$f3=A.bs(function(b,c){if(b===1)return A.bo(c,r) +for(;;)switch(s){case 0:o=A.i([],t.Z) +n=a.bQ() +if((n==null?$.dd():n).length===0)throw A.f(A.S('Incorrect EPUB file: content file "'+p.b+'" specified in manifest is not found.')) +n=a.bQ() +B.a.a1(o,n==null?$.dd():n) +q=o +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$f3,r)}, +nB(a){var s=A.i([],t.Z),r=a.bQ() +if((r==null?$.dd():r).length===0)throw A.f(A.S('Incorrect EPUB file: content file "'+this.b+'" specified in manifest is not found.')) +r=a.bQ() +B.a.a1(s,r==null?$.dd():r) +return s}, +d1(){var s=0,r=A.br(t.L),q,p=this +var $async$d1=A.bs(function(a,b){if(a===1)return A.bo(b,r) +for(;;)switch(s){case 0:s=3 +return A.c3(p.f3(p.ft()),$async$d1) +case 3:q=b +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$d1,r)}, +dU(){var s=0,r=A.br(t.N),q,p=this,o +var $async$dU=A.bs(function(a,b){if(a===1)return A.bo(b,r) +for(;;)switch(s){case 0:o=B.E +s=3 +return A.c3(p.d1(),$async$dU) +case 3:q=o.b0(b) +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$dU,r)}} +A.lU.prototype={ +$1(a){return t.u.a(a).a===this.a}, +$S:9} +A.ih.prototype={ +gq(a){var s,r,q,p=this,o=B.l.gdM(),n=o.$1(p.a),m=o.$1(p.b) +if(typeof n!=="number")return n.jT() +if(typeof m!=="number")return A.aN(m) +s=o.$1(p.c) +if(typeof s!=="number")return A.aN(s) +r=o.$1(p.d) +if(typeof r!=="number")return A.aN(r) +q=o.$1(p.e) +if(typeof q!=="number")return A.aN(q) +return(n^m^s^r^q)>>>0}, +v(a,b){var s,r=this +if(b==null)return!1 +t.aN.a(b) +if(r===b)return!0 +s=B.l.gar() +return s.$2(b.a,r.a)&&s.$2(b.b,r.b)&&s.$2(b.c,r.c)&&s.$2(b.d,r.d)&&s.$2(b.e,r.e)}} +A.fb.prototype={ +gq(a){var s=this +return(s.a.gq(0)^B.b.gq(s.b)^B.b.gq(s.d)^J.B(s.c))>>>0}, +v(a,b){var s=this +if(b==null)return!1 +t.am.a(b) +if(s===b)return!0 +return b.a.v(0,s.a)&&b.b===s.b&&b.d===s.d&&b.c==s.c}} +A.f3.prototype={ +gq(a){return J.B(this.a)^J.B(this.b)}, +v(a,b){if(b==null)return!1 +t.j1.a(b) +if(this===b)return!0 +return b.a==this.a&&b.b==this.b}, +j(a){return"Source: "+A.k(this.b)}} +A.f2.prototype={ +gq(a){var s=this +return(J.B(s.a)^B.l.Y(s.b.a)^B.l.Y(s.c)^B.l.Y(s.d.a)^J.B(s.e)^B.l.Y(s.f))>>>0}, +v(a,b){var s,r=this +if(b==null)return!1 +t.kZ.a(b) +if(r===b)return!0 +s=B.l.gar() +return J.N(b.a,r.a)&&b.b.v(0,r.b)&&s.$2(b.c,r.c)&&b.d.v(0,r.d)&&J.N(b.e,r.e)&&s.$2(b.f,r.f)}} +A.cm.prototype={ +gq(a){return B.l.Y(this.a)}, +v(a,b){if(b==null)return!1 +t.ck.a(b) +if(this===b)return!0 +return B.l.gar().$2(b.a,this.a)}} +A.f4.prototype={ +gq(a){return B.l.Y(this.a)}, +v(a,b){if(b==null)return!1 +t.f5.a(b) +if(this===b)return!0 +return B.l.gar().$2(b.a,this.a)}} +A.il.prototype={ +gq(a){return B.l.Y(this.a)}, +v(a,b){if(b==null)return!1 +t.aw.a(b) +if(this===b)return!0 +return B.l.gar().$2(b.a,this.a)}} +A.f5.prototype={ +gq(a){return B.b.gq(this.a)^B.b.gq(this.b)^J.B(this.c)}, +v(a,b){var s=this +if(b==null)return!1 +t.eo.a(b) +if(s===b)return!0 +return b.a===s.a&&b.b===s.b&&b.c==s.c}} +A.cS.prototype={ +gq(a){return B.b.gq(this.a)}, +v(a,b){if(b==null)return!1 +t.gK.a(b) +if(this===b)return!0 +return b.a===this.a}, +j(a){return this.a}} +A.cn.prototype={ +gq(a){var s=this +return(J.B(s.a)^J.B(s.b)^B.l.Y(s.c)^B.l.Y(s.d))>>>0}, +v(a,b){var s,r=this +if(b==null)return!1 +t.c9.a(b) +if(r===b)return!0 +s=B.l.gar() +return b.a==r.a&&b.b==r.b&&s.$2(b.c,r.c)&&s.$2(b.d,r.d)}} +A.f6.prototype={ +gq(a){return B.l.Y(this.a)}, +v(a,b){if(b==null)return!1 +t.ni.a(b) +if(this===b)return!0 +return B.l.gar().$2(b.a,this.a)}} +A.im.prototype={ +gq(a){return B.l.Y(this.a)}, +v(a,b){if(b==null)return!1 +t.eH.a(b) +if(this===b)return!0 +return B.l.gar().$2(b.a,this.a)}} +A.f7.prototype={ +gq(a){var s=this +return(J.B(s.a)^J.B(s.b)^B.cU.gq(s.c)^J.B(s.d)^J.B(s.e)^B.l.Y(s.f)^B.cU.gq(s.r))>>>0}, +v(a,b){var s=this +if(b==null)return!1 +t.on.a(b) +if(s===b)return!0 +return b.a==s.a&&b.b==s.b&&b.d==s.d&&b.e==s.e&&B.l.gar().$2(b.f,s.f)&&!0}} +A.cT.prototype={ +bn(){return"EpubNavigationPageTargetType."+this.b}} +A.co.prototype={ +gq(a){var s=this +return(J.B(s.a)^J.B(s.b)^J.B(s.c)^B.l.Y(s.d)^J.B(s.e)^B.l.Y(s.f))>>>0}, +v(a,b){var s,r=this +if(b==null)return!1 +t.iV.a(b) +if(r===b)return!0 +s=B.l.gar() +return b.a==r.a&&b.b==r.b&&b.c==r.c&&s.$2(b.d,r.d)&&J.N(b.e,r.e)&&s.$2(b.f,r.f)}, +j(a){var s=this.e +s=s==null?null:s.b +return"Id: "+A.k(this.a)+", Content.Source: "+A.k(s)}} +A.f8.prototype={ +gq(a){var s=this +return(B.b.gq(s.a)^J.B(s.b)^J.B(s.c)^J.B(s.d)^B.l.Y(s.e)^J.B(s.f))>>>0}, +v(a,b){var s=this +if(b==null)return!1 +t.p7.a(b) +if(s===b)return!0 +return b.a===s.a&&b.b==s.b&&b.c==s.c&&b.d==s.d&&B.l.gar().$2(b.e,s.e)&&J.N(b.f,s.f)}} +A.ii.prototype={ +gq(a){return B.l.Y(this.a)}, +v(a,b){if(b==null)return!1 +t.fc.a(b) +if(this===b)return!0 +return B.l.gar().$2(b.a,this.a)}} +A.eZ.prototype={ +gq(a){return B.b.gq(this.a)^J.B(this.b)^B.b.gq(this.c)}, +v(a,b){var s=this +if(b==null)return!1 +t.iA.a(b) +if(s===b)return!0 +return b.a===s.a&&b.b==s.b&&b.c===s.c}, +j(a){return"Type: "+this.a+", Href: "+this.c}} +A.ij.prototype={ +gq(a){return B.l.Y(this.a)}, +v(a,b){if(b==null)return!1 +t.pd.a(b) +if(this===b)return!0 +return B.l.gar().$2(b.a,this.a)}} +A.dk.prototype={ +gq(a){var s=this +return B.b.gq(s.a)^B.b.gq(s.b)^B.b.gq(s.c)^J.B(s.d)^J.B(s.e)^J.B(s.f)^J.B(s.r)^J.B(s.w)^J.B(s.x)}, +v(a,b){var s=this +if(b==null)return!1 +t.A.a(b) +if(s===b)return!0 +return b.a===s.a&&b.b===s.b&&b.c===s.c&&b.d==s.d&&b.e==s.e&&b.f==s.f&&b.r==s.r&&b.w==s.w&&b.x==s.x}, +j(a){var s=this +return"Id: "+s.a+", Href = "+s.b+", MediaType = "+s.c+", Properties = "+A.k(s.x)+", MediaOverlay = "+A.k(s.d)}} +A.ik.prototype={ +gq(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=B.l.gdM(),c=d.$1(e.a),b=d.$1(e.b) +if(typeof c!=="number")return c.jT() +if(typeof b!=="number")return A.aN(b) +s=d.$1(e.c) +if(typeof s!=="number")return A.aN(s) +r=J.B(e.d) +q=d.$1(e.e) +if(typeof q!=="number")return A.aN(q) +p=d.$1(e.f) +if(typeof p!=="number")return A.aN(p) +o=d.$1(e.r) +if(typeof o!=="number")return A.aN(o) +n=d.$1(e.w) +if(typeof n!=="number")return A.aN(n) +m=d.$1(e.x) +if(typeof m!=="number")return A.aN(m) +l=d.$1(e.y) +if(typeof l!=="number")return A.aN(l) +k=d.$1(e.z) +if(typeof k!=="number")return A.aN(k) +j=d.$1(e.Q) +if(typeof j!=="number")return A.aN(j) +i=d.$1(e.as) +if(typeof i!=="number")return A.aN(i) +h=d.$1(e.at) +if(typeof h!=="number")return A.aN(h) +g=d.$1(e.ax) +if(typeof g!=="number")return A.aN(g) +f=d.$1(e.ay) +if(typeof f!=="number")return A.aN(f) +return(c^b^s^r^q^p^o^n^m^l^k^j^i^h^g^f)>>>0}, +v(a,b){var s,r=this +if(b==null)return!1 +t.mz.a(b) +if(r===b)return!0 +s=B.l.gar() +return s.$2(b.a,r.a)&&s.$2(b.b,r.b)&&s.$2(b.c,r.c)&&b.d==r.d&&s.$2(b.e,r.e)&&s.$2(b.f,r.f)&&s.$2(b.r,r.r)&&s.$2(b.w,r.w)&&s.$2(b.x,r.x)&&s.$2(b.y,r.y)&&s.$2(b.z,r.z)&&s.$2(b.Q,r.Q)&&s.$2(b.as,r.as)&&s.$2(b.at,r.at)&&s.$2(b.ax,r.ax)&&s.$2(b.ay,r.ay)}} +A.f_.prototype={ +gq(a){return B.b.gq(this.a)^J.B(this.b)^J.B(this.c)}, +v(a,b){var s=this +if(b==null)return!1 +t.ib.a(b) +if(s===b)return!0 +return b.a===s.a&&b.b==s.b&&b.c==s.c}} +A.dl.prototype={ +gq(a){return B.b.gq(this.a)^J.B(this.b)^J.B(this.c)}, +v(a,b){var s=this +if(b==null)return!1 +t.fj.a(b) +if(s===b)return!0 +return b.a===s.a&&b.b==s.b&&b.c==s.c}} +A.f0.prototype={ +gq(a){return B.b.gq(this.a)^J.B(this.b)}, +v(a,b){if(b==null)return!1 +t.fW.a(b) +if(this===b)return!0 +return b.a===this.a&&b.b==this.b}} +A.f1.prototype={ +gq(a){return J.B(this.a)^J.B(this.b)^B.b.gq(this.c)}, +v(a,b){var s=this +if(b==null)return!1 +t.mv.a(b) +if(s===b)return!0 +return b.a==s.a&&b.b==s.b&&b.c===s.c}} +A.cR.prototype={ +gq(a){var s=this +return(J.B(s.a)^J.B(s.b)^J.B(s.c)^J.B(s.d)^J.B(s.e)^J.B(s.f)^B.l.Y(s.r))>>>0}, +v(a,b){var s=this +if(b==null)return!1 +t.az.a(b) +if(s===b)return!0 +return b.a==s.a&&b.b==s.b&&b.c==s.c&&b.d==s.d&&b.e==s.e&&b.f==s.f&&B.l.gar().$2(b.r,s.r)}} +A.io.prototype={ +gq(a){var s=this +return(A.dy(s.a)^s.b.gq(0)^B.l.Y(s.c.a)^s.d.gq(0)^J.B(s.e))>>>0}, +v(a,b){var s=this +if(b==null)return!1 +t.hl.a(b) +if(s===b)return!0 +return b.a===s.a&&b.b.v(0,s.b)&&b.c.v(0,s.c)&&b.d.v(0,s.d)&&J.N(b.e,s.e)}} +A.iq.prototype={ +gq(a){var s=J.B(this.a),r=B.l.Y(this.b),q=this.c?519018:218159 +return(s^r^q)>>>0}, +v(a,b){var s=this +if(b==null)return!1 +t.oe.a(b) +if(s===b)return!0 +return b.a==s.a&&B.l.gar().$2(b.b,s.b)&&b.c===s.c}} +A.fa.prototype={ +gq(a){var s=B.b.gq(this.a) +return s^(this.b?519018:218159)}, +v(a,b){if(b==null)return!1 +t.ad.a(b) +if(this===b)return!0 +return b.a===this.a&&b.b===this.b}, +j(a){return"IdRef: "+this.a}} +A.ir.prototype={ +bn(){return"EpubVersion."+this.b}} +A.ig.prototype={ +iO(a){var s,r,q={} +q.a=a +q.a=A.ch(this.$ti.c).j(0)+"."+a +try{s=B.a.cp(this.a,new A.lT(q,this)) +return s}catch(r){return null}}} +A.lT.prototype={ +$1(a){return J.ay(this.b.$ti.c.a(a)).toUpperCase()===this.a.a.toUpperCase()}, +$S(){return this.b.$ti.h("A(1)")}} +A.aO.prototype={ +j(a){var s=this.a,r=this.b +return s!=null?s+":"+r:r}, +gq(a){return 37*(37*(J.B(this.a)&2097151)+B.b.gq(this.b)&2097151)+B.b.gq(this.c)&1073741823}, +ai(a,b){var s,r,q +if(!(b instanceof A.aO))return 1 +s=this.a +if(s==null)s="" +r=b.a +q=B.b.ai(s,r==null?"":r) +if(q!==0)return q +q=B.b.ai(this.b,b.b) +if(q!==0)return q +return B.b.ai(this.c,b.c)}, +v(a,b){if(b==null)return!1 +return b instanceof A.aO&&this.a==b.a&&this.b===b.b&&this.c===b.c}, +$ia6:1} +A.kQ.prototype={} +A.oU.prototype={} +A.kI.prototype={} +A.am.prototype={ +gL(){var s,r=this,q=r.c +if(q===$){s=A.i([],t.cx) +r.c!==$&&A.dc() +q=r.c=new A.ji(r,s)}return q}, +fQ(a){var s,r,q +for(s=this.gL().a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c;s.p();){q=s.d;(q==null?r.a(q):q).cg(a)}}, +dW(a){var s=this.a +if(s!=null)B.a.W(s.gL().a,this) +return this}, +nb(a,b){var s +if(b==null)this.gL().l(0,a) +else{s=this.gL() +s.bx(0,s.al(s,b),a)}}, +df(a,b,c){var s,r,q,p,o +A.uj(c,t.fh,"T","_clone") +c.a(a) +if(b)for(s=this.gL().a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c;s.p();){q=s.d +q=(q==null?r.a(q):q).cM(!0) +p=a.gL() +o=q.a +if(o!=null)B.a.W(o.gL().a,q) +q.a=p.b +p.bW(0,q)}return a}, +saZ(a){this.b=t.oP.a(a)}} +A.eT.prototype={ +j(a){return"#document"}, +cg(a){return this.fQ(a)}, +cM(a){return this.df(A.ro(),!0,t.dA)}} +A.i9.prototype={ +j(a){var s,r=this,q=r.x,p=q==null +if(!p||r.y!=null){if(p)q="" +s=r.y +if(s==null)s="" +return"'}else return""}, +cg(a){var s=this.j(0) +a.a+=s}, +cM(a){return A.rp(this.w,this.x,this.y)}} +A.bY.prototype={ +j(a){var s=J.ay(this.w) +this.w=s +return'"'+s+'"'}, +cg(a){return A.zF(a,this)}, +cM(a){var s=J.ay(this.w) +this.w=s +return A.qk(s)}, +hM(a){var s=this.w;(!(s instanceof A.Y)?this.w=new A.Y(A.k(s)):s).a+=a}} +A.K.prototype={ +gdR(){var s,r,q,p,o=this.a +if(o==null)return null +s=o.gL() +for(r=s.al(s,this)-1,o=s.a,q=o.length;r>=0;--r){if(!(r=0))return A.c(q,r) +o=q[r] +if(o instanceof A.K)return o}return null}, +j(a){var s=A.rF(this.w) +return"<"+(s==null?"":s+" ")+A.k(this.x)+">"}, +cg(a){var s,r,q,p,o=this +a.a+="<" +s=A.vI(o.w) +r=o.x +q=A.k(r) +a.a=(a.a+=s)+q +s=o.b +if(s.a!==0)s.T(0,new A.lR(a)) +a.a+=">" +s=o.gL() +if(!s.gN(s)){if(r==="pre"||r==="textarea"||r==="listing"){s=s.a +if(0>=s.length)return A.c(s,0) +p=s[0] +if(p instanceof A.bY){s=J.ay(p.w) +p.w=s +s=B.b.U(s,"\n")}else s=!1 +if(s)a.a+="\n"}o.fQ(a)}if(!A.zi(r))a.a+=""}, +cM(a){var s=this,r=A.q1(s.x,s.w) +r.saZ(A.j2(s.b,t.K,t.N)) +return s.df(r,a,t.Q)}, +geW(){var s=this.b.m(0,"id") +return s==null?"":s}} +A.lR.prototype={ +$2(a,b){var s,r +A.cg(a) +A.q(b) +s=this.a +s.a+=" " +r=A.k(a) +s.a=(s.a+=r)+'="' +r=A.uw(b,!0) +s.a=(s.a+=r)+'"'}, +$S:17} +A.i6.prototype={ +j(a){return""}, +cg(a){a.a+=""}, +cM(a){return A.rm(this.w)}} +A.ji.prototype={ +l(a,b){t.fh.a(b) +b.dW(0) +b.a=this.b +this.bW(0,b)}, +a1(a,b){var s,r,q,p,o,n=this.kt(t.fY.a(b)) +for(s=A.w(n).h("X<1>"),r=new A.X(n,s),r=new A.M(r,r.gn(0),s.h("M")),q=this.b,s=s.h("G.E");r.p();){p=r.d +if(p==null)p=s.a(p) +o=p.a +if(o!=null)B.a.W(o.gL().a,p) +p.a=q}this.jM(0,n)}, +bx(a,b,c){c.dW(0) +c.a=this.b +this.fK(0,b,c)}, +bc(a){var s,r,q +for(s=this.a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c;s.p();){q=s.d;(q==null?r.a(q):q).a=null}this.jJ(this)}, +k(a,b,c){var s +t.fh.a(c) +s=this.a +if(!(b>=0&&b=0&&b=s)return +else if(b<0)throw A.f(A.W("Invalid list length",null)) +this.fc(0,b,s)}, +l(a,b){this.a.l(0,t.Q.a(b))}, +C(a,b){return!1}, +bV(a,b){t.dU.a(b) +throw A.f(A.ac("TODO(jacobr): should we impl?"))}, +fc(a,b,c){var s=t.w +s=A.a7(new A.O(this.a,s),s.h("h.E")) +s.$flags=1 +B.a.T(B.a.am(s,b,c),new A.md())}, +c8(a,b,c){var s,r +c.h("0(K)").a(b) +s=t.w +s=A.a7(new A.O(this.a,s),s.h("h.E")) +s.$flags=1 +s=s +r=A.w(s) +return new A.Q(s,r.u(c).h("1(2)").a(b),r.h("@<1>").u(c).h("Q<1,2>"))}, +ag(a,b){var s=t.w +s=A.a7(new A.O(this.a,s),s.h("h.E")) +s.$flags=1 +s=s +if(!(b>=0&&b=0&&b"))}, +$iz:1, +$im:1} +A.md.prototype={ +$1(a){return t.Q.a(a).dW(0)}, +$S:96} +A.kF.prototype={} +A.kG.prototype={} +A.kH.prototype={} +A.kJ.prototype={} +A.kK.prototype={} +A.kN.prototype={} +A.mB.prototype={ +gaD(){var s=this.x +return s===$?this.x=this.gbo():s}, +gbo(){var s=this,r=s.Q +return r===$?s.Q=new A.iN(s,s.d):r}, +gfU(){var s=this,r=s.as +return r===$?s.as=new A.hZ(s,s.d):r}, +gfT(){var s=this,r=s.at +return r===$?s.at=new A.hY(s,s.d):r}, +gc0(){var s=this,r=s.ax +return r===$?s.ax=new A.iG(s,s.d):r}, +ga4(){var s=this,r=s.ch +return r===$?s.ch=new A.iA(s,s.d):r}, +ghu(){var s=this,r=s.CW +return r===$?s.CW=new A.jU(s,s.d):r}, +gaA(){var s=this,r=s.cx +return r===$?s.cx=new A.iL(s,s.d):r}, +gen(){var s,r=this,q=r.cy +if(q===$){s=A.i([],t.ks) +r.cy!==$&&A.dc() +q=r.cy=new A.fg(s,r,r.d)}return q}, +gek(){var s=this,r=s.db +return r===$?s.db=new A.iB(s,s.d):r}, +gel(){var s=this,r=s.dx +return r===$?s.dx=new A.iD(s,s.d):r}, +gcj(){var s=this,r=s.dy +return r===$?s.dy=new A.iK(s,s.d):r}, +gdk(){var s=this,r=s.fr +return r===$?s.fr=new A.iH(s,s.d):r}, +gdj(){var s=this,r=s.fx +return r===$?s.fx=new A.iC(s,s.d):r}, +gbH(){var s=this,r=s.fy +return r===$?s.fy=new A.iJ(s,s.d):r}, +gem(){var s=this,r=s.k2 +return r===$?s.k2=new A.iF(s,s.d):r}, +kE(){var s +this.aL() +for(;;)try{this.nn() +break}catch(s){if(A.bP(s) instanceof A.nB)this.aL() +else throw s}}, +aL(){var s=this +s.c.aL() +s.d.aL() +s.f=!1 +B.a.bc(s.e) +s.r="no quirks" +s.x=s.gbo() +s.z=!0}, +ic(a){var s,r=a.x +if(r==="annotation-xml"&&a.w==="http://www.w3.org/1998/Math/MathML"){r=a.b.m(0,"encoding") +s=r==null?null:A.c9(r) +return s==="text/html"||s==="application/xhtml+xml"}else return B.Mu.C(0,new A.l(a.w,r))}, +n9(a,b){var s,r=this.d,q=r.c +if(q.length===0)return!1 +s=B.a.gA(q) +q=s.w +if(q==r.a)return!1 +r=s.x +if(B.hP.C(0,new A.l(q,r))){if(b===2){q=t.ny.a(a).b +q=q!=="mglyph"&&q!=="malignmark"}else q=!1 +if(q)return!1 +if(b===1||b===0)return!1}if(r==="annotation-xml"&&b===2&&t.ny.a(a).b==="svg")return!1 +if(this.ic(s))if(b===2||b===1||b===0)return!1 +return!0}, +nn(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8=this +for(s=a8.c,r=a8.d,q=t.W,p=t.cw,o=t.ia,n=t.ny,m=t.fp,l=t.g4,k=a8.e,j=t.n,i=t.jK,h=s.a,g=t.N,f=t.X;s.p();){e=s.at +e.toString +for(d=e;d!=null;){c=d.gc7() +if(c===6){i.a(d) +b=d.a +a=d.c +if(a==null){a=d.c=J.ay(d.b) +d.b=null}a0=j.a(d.e) +if(b==null){a1=h.w +if(a1==null)b=null +else{a2=h.y +new A.bh(a1,a2).bh(a1,a2) +b=new A.aw(a1,a2,a2) +b.aG(a1,a2,a2)}}B.a.l(k,new A.bb(a,b,a0)) +d=null}else{a3=a8.x +if(a3===$){a3=a8.gbo() +a8.x=a3}if(a8.n9(e,c)){a3=a8.id +if(a3===$){a4=new A.iE(a8,r) +a8.id=a4 +a3=a4}a5=a3}else a5=a3 +switch(c){case 1:d=a5.a3(l.a(d)) +break +case 0:d=a5.aJ(m.a(d)) +break +case 2:d=a5.J(n.a(d)) +break +case 3:d=a5.P(o.a(d)) +break +case 4:d=a5.cb(p.a(d)) +break +case 5:d=a5.im(q.a(d)) +break}}}if(e instanceof A.d2)if(e.c&&!e.r){b=e.a +e=j.a(A.v(["name",e.b],g,f)) +if(b==null){a=h.w +if(a==null)b=null +else{a0=h.y +new A.bh(a,a0).bh(a,a0) +b=new A.aw(a,a0,a0) +b.aG(a,a0,a0)}}B.a.l(k,new A.bb("non-void-element-with-trailing-solidus",b,e))}}a6=A.i([],t.gg) +for(a7=!0;a7;){a3=a8.x +B.a.l(a6,a3===$?a8.x=a8.gbo():a3) +a3=a8.x +a7=(a3===$?a8.x=a8.gbo():a3).ac()}}, +ghd(){var s=this.c.a,r=s.w +if(r==null)s=null +else{s=A.cU(r,s.y) +r=s.b +r=A.qy(s.a,r,r) +s=r}return s}, +G(a,b,c){var s +t.n.a(c) +s=new A.bb(b,a==null?this.ghd():a,c) +B.a.l(this.e,s)}, +a2(a,b){return this.G(a,b,B.bi)}, +hH(a){var s=a.e.W(0,"definitionurl") +if(s!=null)a.e.k(0,"definitionURL",s)}, +hI(a){var s,r,q,p,o=a.e,n=A.x(o).h("aV<1>") +o=A.a7(new A.aV(o,n),n.h("h.E")) +o.$flags=1 +o=o +n=o.length +s=0 +for(;s") +o=A.a7(new A.aV(o,n),n.h("h.E")) +o.$flags=1 +o=o +n=o.length +s=0 +for(;s"),p=new A.X(r,q),p=new A.M(p,p.gn(0),q.h("M")),q=q.h("G.E"),s=s.a;p.p();){o=p.d +if(o==null)o=q.a(o) +n=o.x +if(0>=r.length)return A.c(r,0) +m=o===r[0] +if(m)n=l.w +switch(n){case"select":case"colgroup":case"head":case"html":break}if(!m&&o.w!=s)continue +switch(n){case"select":l.x=l.gbH() +return +case"td":l.x=l.gdj() +return +case"th":l.x=l.gdj() +return +case"tr":l.x=l.gdk() +return +case"tbody":l.x=l.gcj() +return +case"thead":l.x=l.gcj() +return +case"tfoot":l.x=l.gcj() +return +case"caption":l.x=l.gek() +return +case"colgroup":l.x=l.gel() +return +case"table":l.x=l.gaA() +return +case"head":l.x=l.ga4() +return +case"body":l.x=l.ga4() +return +case"frameset":l.x=l.gem() +return +case"html":l.x=l.gfT() +return}}l.x=l.ga4()}, +cY(a,b){var s,r,q=this +q.d.O(a) +s=t.c +r=q.c +if(b==="RAWTEXT")r.x=s.a(r.gdT()) +else r.x=s.a(r.gcu()) +q.y=q.gaD() +q.x=q.ghu()}} +A.aa.prototype={ +ac(){throw A.f(A.k_(null))}, +cb(a){var s=this.b +s.cr(a,B.a.gA(s.c)) +return null}, +im(a){this.a.a2(a.a,"unexpected-doctype") +return null}, +a3(a){this.b.bN(a.gaC(),a.a) +return null}, +aJ(a){this.b.bN(a.gaC(),a.a) +return null}, +J(a){throw A.f(A.k_(null))}, +bg(a){var s,r=this.a +if(!r.f&&a.b==="html")r.a2(a.a,"non-html-root") +s=this.b.c +if(0>=s.length)return A.c(s,0) +s[0].e=a.a +a.e.T(0,new A.nq(this)) +r.f=!1 +return null}, +P(a){throw A.f(A.k_(null))}, +ct(a){var s,r=a.b,q=this.b.c +if(0>=q.length)return A.c(q,-1) +s=q.pop() +while(s.x!=r){if(0>=q.length)return A.c(q,-1) +s=q.pop()}}} +A.nq.prototype={ +$2(a,b){var s +A.cg(a) +A.q(b) +s=this.a.b.c +if(0>=s.length)return A.c(s,0) +s[0].b.f7(a,new A.np(b))}, +$S:17} +A.np.prototype={ +$0(){return this.a}, +$S:8} +A.iN.prototype={ +aJ(a){return null}, +cb(a){var s=this.b,r=s.b +r===$&&A.o() +s.cr(a,r) +return null}, +im(a){var s,r,q=this,p=a.d,o=a.b,n=o==null?null:A.c9(o),m=a.c,l=a.e +o=!0 +if(p==="html")if(n==null)o=m!=null&&m!=="about:legacy-compat" +if(o)q.a.a2(a.a,"unknown-doctype") +if(n==null)n="" +s=A.rp(a.d,a.b,a.c) +s.e=a.a +o=q.b.b +o===$&&A.o() +o.gL().l(0,s) +o=!0 +if(l)if(a.d==="html"){r=B.b.gfF(n) +if(!B.a.aH(B.iW,r))if(!B.a.C(B.jl,n))if(!(B.a.aH(B.cW,r)&&m==null))o=m!=null&&m.toLowerCase()==="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"}if(o)q.a.r="quirks" +else{o=B.b.gfF(n) +if(!B.a.aH(B.jf,o))o=B.a.aH(B.cW,o)&&m!=null +else o=!0 +if(o)q.a.r="limited quirks"}o=q.a +o.x=o.gfU() +return null}, +br(){var s=this.a +s.r="quirks" +s.x=s.gfU()}, +a3(a){this.a.a2(a.a,"expected-doctype-but-got-chars") +this.br() +return a}, +J(a){this.a.G(a.a,"expected-doctype-but-got-start-tag",A.v(["name",a.b],t.N,t.X)) +this.br() +return a}, +P(a){this.a.G(a.a,"expected-doctype-but-got-end-tag",A.v(["name",a.b],t.N,t.X)) +this.br() +return a}, +ac(){var s=this.a +s.a2(s.ghd(),"expected-doctype-but-got-eof") +this.br() +return!0}} +A.hZ.prototype={ +dN(){var s=this.b,r=s.i1(A.aZ("html",A.ae(t.K,t.N),null,!1)) +B.a.l(s.c,r) +s=s.b +s===$&&A.o() +s.gL().l(0,r) +s=this.a +s.x=s.gfT()}, +ac(){this.dN() +return!0}, +cb(a){var s=this.b,r=s.b +r===$&&A.o() +s.cr(a,r) +return null}, +aJ(a){return null}, +a3(a){this.dN() +return a}, +J(a){if(a.b==="html")this.a.f=!0 +this.dN() +return a}, +P(a){var s=a.b +switch(s){case"head":case"body":case"html":case"br":this.dN() +return a +default:this.a.G(a.a,"unexpected-end-tag-before-html",A.v(["name",s],t.N,t.X)) +return null}}} +A.hY.prototype={ +J(a){switch(a.b){case"html":return this.a.ga4().J(a) +case"head":this.cF(a) +return null +default:this.cF(A.aZ("head",A.ae(t.K,t.N),null,!1)) +return a}}, +P(a){var s=a.b +switch(s){case"head":case"body":case"html":case"br":this.cF(A.aZ("head",A.ae(t.K,t.N),null,!1)) +return a +default:this.a.G(a.a,"end-tag-after-implied-root",A.v(["name",s],t.N,t.X)) +return null}}, +ac(){this.cF(A.aZ("head",A.ae(t.K,t.N),null,!1)) +return!0}, +aJ(a){return null}, +a3(a){this.cF(A.aZ("head",A.ae(t.K,t.N),null,!1)) +return a}, +cF(a){var s=this.b +s.O(a) +s.e=B.a.gA(s.c) +s=this.a +s.x=s.gc0()}} +A.iG.prototype={ +J(a){var s,r,q,p,o,n=this,m=null +switch(a.b){case"html":return n.a.ga4().J(a) +case"title":n.a.cY(a,"RCDATA") +return m +case"noscript":case"noframes":case"style":n.a.cY(a,"RAWTEXT") +return m +case"script":n.b.O(a) +s=n.a +r=s.c +r.x=t.c.a(r.gbC()) +s.y=s.gaD() +s.x=s.ghu() +return m +case"base":case"basefont":case"bgsound":case"command":case"link":s=n.b +s.O(a) +s=s.c +if(0>=s.length)return A.c(s,-1) +s.pop() +a.r=!0 +return m +case"meta":s=n.b +s.O(a) +s=s.c +if(0>=s.length)return A.c(s,-1) +s.pop() +a.r=!0 +q=a.e +s=n.a.c.a +if(!s.b){p=q.m(0,"charset") +o=q.m(0,"content") +if(p!=null)s.hS(p) +else if(o!=null)s.hS(new A.lN(new A.lS(o)).nE())}return m +case"head":n.a.a2(a.a,"two-heads-are-not-better-than-one") +return m +default:n.cO(new A.H("head",!1)) +return a}}, +P(a){var s=a.b +switch(s){case"head":this.cO(a) +return null +case"br":case"html":case"body":this.cO(new A.H("head",!1)) +return a +default:this.a.G(a.a,"unexpected-end-tag",A.v(["name",s],t.N,t.X)) +return null}}, +ac(){this.cO(new A.H("head",!1)) +return!0}, +a3(a){this.cO(new A.H("head",!1)) +return a}, +cO(a){var s,r=this.a,q=r.d,p=q.c +if(0>=p.length)return A.c(p,-1) +p.pop() +s=r.ay +r.x=s===$?r.ay=new A.hM(r,q):s}} +A.hM.prototype={ +J(a){var s=this,r=null,q=a.b +switch(q){case"html":return s.a.ga4().J(a) +case"body":q=s.a +q.z=!1 +s.b.O(a) +q.x=q.ga4() +return r +case"frameset":s.b.O(a) +q=s.a +q.x=q.gem() +return r +case"base":case"basefont":case"bgsound":case"link":case"meta":case"noframes":case"script":case"style":case"title":s.jv(a) +return r +case"head":s.a.G(a.a,"unexpected-start-tag",A.v(["name",q],t.N,t.X)) +return r +default:s.br() +return a}}, +P(a){var s=a.b +switch(s){case"body":case"html":case"br":this.br() +return a +default:this.a.G(a.a,"unexpected-end-tag",A.v(["name",s],t.N,t.X)) +return null}}, +ac(){this.br() +return!0}, +a3(a){this.br() +return a}, +jv(a){var s,r,q,p=this.a +p.G(a.a,"unexpected-start-tag-out-of-my-head",A.v(["name",a.b],t.N,t.X)) +s=this.b +r=s.c +B.a.l(r,t.Q.a(s.e)) +p.gc0().J(a) +for(p=A.w(r).h("X<1>"),s=new A.X(r,p),s=new A.M(s,s.gn(0),p.h("M")),p=p.h("G.E");s.p();){q=s.d +if(q==null)q=p.a(q) +if(q.x==="head"){B.a.W(r,q) +break}}}, +br(){this.b.O(A.aZ("body",A.ae(t.K,t.N),null,!1)) +var s=this.a +s.x=s.ga4() +s.z=!0}} +A.iA.prototype={ +J(a){var s,r,q,p,o,n=this,m=null,l="p",k="button",j="unexpected-start-tag",i="unexpected-start-tag-implies-end-tag",h="RAWTEXT",g=a.b +switch(g){case"html":return n.bg(a) +case"base":case"basefont":case"bgsound":case"command":case"link":case"meta":case"noframes":case"script":case"style":case"title":return n.a.gc0().J(a) +case"body":n.js(a) +return m +case"frameset":n.ju(a) +return m +case"address":case"article":case"aside":case"blockquote":case"center":case"details":case"dir":case"div":case"dl":case"fieldset":case"figcaption":case"figure":case"footer":case"header":case"hgroup":case"menu":case"nav":case"ol":case"p":case"section":case"summary":case"ul":n.fz(a) +return m +case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":g=n.b +if(g.a0(l,k))n.bt(new A.H(l,!1)) +s=g.c +if(B.hS.C(0,B.a.gA(s).x)){n.a.G(a.a,j,A.v(["name",a.b],t.N,t.X)) +if(0>=s.length)return A.c(s,-1) +s.pop()}g.O(a) +return m +case"pre":case"listing":g=n.b +if(g.a0(l,k))n.bt(new A.H(l,!1)) +g.O(a) +n.a.z=!1 +n.c=!0 +return m +case"form":g=n.b +if(g.f!=null)n.a.G(a.a,j,A.v(["name","form"],t.N,t.X)) +else{if(g.a0(l,k))n.bt(new A.H(l,!1)) +g.O(a) +g.f=B.a.gA(g.c)}return m +case"li":case"dd":case"dt":n.jy(a) +return m +case"plaintext":g=n.b +if(g.a0(l,k))n.bt(new A.H(l,!1)) +g.O(a) +g=n.a.c +g.x=t.c.a(g.gnH()) +return m +case"a":g=n.b +r=g.i5("a") +if(r!=null){n.a.G(a.a,i,A.v(["startName","a","endName","a"],t.N,t.X)) +n.i8(new A.H("a",!1)) +B.a.W(g.c,r) +B.a.W(g.d.a,r)}g.aE() +n.ew(a) +return m +case"b":case"big":case"code":case"em":case"font":case"i":case"s":case"small":case"strike":case"strong":case"tt":case"u":n.b.aE() +n.ew(a) +return m +case"nobr":g=n.b +g.aE() +if(g.b6("nobr")){n.a.G(a.a,i,A.v(["startName","nobr","endName","nobr"],t.N,t.X)) +n.P(new A.H("nobr",!1)) +g.aE()}n.ew(a) +return m +case"button":return n.jt(a) +case"applet":case"marquee":case"object":g=n.b +g.aE() +g.O(a) +g.d.l(0,m) +n.a.z=!1 +return m +case"xmp":g=n.b +if(g.a0(l,k))n.bt(new A.H(l,!1)) +g.aE() +g=n.a +g.z=!1 +g.cY(a,h) +return m +case"table":g=n.a +if(g.r!=="quirks")if(n.b.a0(l,k))n.P(new A.H(l,!1)) +n.b.O(a) +g.z=!1 +g.x=g.gaA() +return m +case"area":case"br":case"embed":case"img":case"keygen":case"wbr":n.fE(a) +return m +case"param":case"source":case"track":g=n.b +g.O(a) +g=g.c +if(0>=g.length)return A.c(g,-1) +g.pop() +a.r=!0 +return m +case"input":g=n.a +q=g.z +n.fE(a) +s=a.e.m(0,"type") +if((s==null?m:A.c9(s))==="hidden")g.z=q +return m +case"hr":g=n.b +if(g.a0(l,k))n.bt(new A.H(l,!1)) +g.O(a) +g=g.c +if(0>=g.length)return A.c(g,-1) +g.pop() +a.r=!0 +n.a.z=!1 +return m +case"image":n.a.G(a.a,"unexpected-start-tag-treated-as",A.v(["originalName","image","newName","img"],t.N,t.X)) +n.J(A.aZ("img",a.e,m,a.c)) +return m +case"isindex":n.jx(a) +return m +case"textarea":n.b.O(a) +g=n.a +s=g.c +s.x=t.c.a(s.gcu()) +n.c=!0 +g.z=!1 +return m +case"iframe":g=n.a +g.z=!1 +g.cY(a,h) +return m +case"noembed":case"noscript":n.a.cY(a,h) +return m +case"select":g=n.b +g.aE() +g.O(a) +g=n.a +g.z=!1 +if(g.gaA()===g.gaD()||g.gek()===g.gaD()||g.gel()===g.gaD()||g.gcj()===g.gaD()||g.gdk()===g.gaD()||g.gdj()===g.gaD()){p=g.go +g.x=p===$?g.go=new A.iI(g,g.d):p}else g.x=g.gbH() +return m +case"rp":case"rt":g=n.b +if(g.b6("ruby")){g.cc() +o=B.a.gA(g.c) +if(o.x!=="ruby")n.a.a2(o.e,"undefined-error")}g.O(a) +return m +case"option":case"optgroup":g=n.b +if(B.a.gA(g.c).x==="option")n.a.gaD().P(new A.H("option",!1)) +g.aE() +n.a.d.O(a) +return m +case"math":g=n.b +g.aE() +s=n.a +s.hH(a) +s.ex(a) +a.w="http://www.w3.org/1998/Math/MathML" +g.O(a) +if(a.c){g=g.c +if(0>=g.length)return A.c(g,-1) +g.pop() +a.r=!0}return m +case"svg":g=n.b +g.aE() +s=n.a +s.hI(a) +s.ex(a) +a.w="http://www.w3.org/2000/svg" +g.O(a) +if(a.c){g=g.c +if(0>=g.length)return A.c(g,-1) +g.pop() +a.r=!0}return m +case"caption":case"col":case"colgroup":case"frame":case"head":case"tbody":case"td":case"tfoot":case"th":case"thead":case"tr":n.a.G(a.a,"unexpected-start-tag-ignored",A.v(["name",g],t.N,t.X)) +return m +default:g=n.b +g.aE() +g.O(a) +return m}}, +P(a){var s,r,q,p,o,n=this,m=null,l="end-tag-too-early",k="unexpected-end-tag",j=a.b +switch(j){case"body":n.i7(a) +return m +case"html":return n.eP(a) +case"address":case"article":case"aside":case"blockquote":case"button":case"center":case"details":case"dir":case"div":case"dl":case"fieldset":case"figcaption":case"figure":case"footer":case"header":case"hgroup":case"listing":case"menu":case"nav":case"ol":case"pre":case"section":case"summary":case"ul":if(j==="pre")n.c=!1 +s=n.b +r=s.b6(j) +if(r)s.cc() +j=B.a.gA(s.c) +s=a.b +if(j.x!=s)n.a.G(a.a,l,A.v(["name",s],t.N,t.X)) +if(r)n.ct(a) +return m +case"form":j=n.b +q=j.f +j.f=null +if(q==null||!j.b6(q))n.a.G(a.a,k,A.v(["name","form"],t.N,t.X)) +else{j.cc() +j=j.c +if(B.a.gA(j)!==q)n.a.G(a.a,"end-tag-too-early-ignored",A.v(["name","form"],t.N,t.X)) +B.a.W(j,q)}return m +case"p":n.bt(a) +return m +case"dd":case"dt":case"li":p=j==="li"?"list":m +s=n.b +j=s.a0(j,p) +o=a.b +if(!j)n.a.G(a.a,k,A.v(["name",o],t.N,t.X)) +else{s.bS(o) +j=B.a.gA(s.c) +s=a.b +if(j.x!=s)n.a.G(a.a,l,A.v(["name",s],t.N,t.X)) +n.ct(a)}return m +case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":n.mW(a) +return m +case"a":case"b":case"big":case"code":case"em":case"font":case"i":case"nobr":case"s":case"small":case"strike":case"strong":case"tt":case"u":n.i8(a) +return m +case"applet":case"marquee":case"object":s=n.b +if(s.b6(j))s.cc() +j=B.a.gA(s.c) +o=a.b +if(j.x!=o)n.a.G(a.a,l,A.v(["name",o],t.N,t.X)) +if(s.b6(a.b)){n.ct(a) +s.eC()}return m +case"br":j=t.N +n.a.G(a.a,"unexpected-end-tag-treated-as",A.v(["originalName","br","newName","br element"],j,t.X)) +s=n.b +s.aE() +s.O(A.aZ("br",A.ae(t.K,j),m,!1)) +s=s.c +if(0>=s.length)return A.c(s,-1) +s.pop() +return m +default:n.mY(a) +return m}}, +nh(a,b){var s,r +if(a.x!=b.x||a.w!=b.w)return!1 +else{s=a.b +if(s.a!==b.b.a)return!1 +else for(s=new A.cv(s,s.r,s.e,A.x(s).h("cv<1>"));s.p();){r=s.d +if(a.b.m(0,r)!=b.b.m(0,r))return!1}}return!0}, +ew(a){var s,r,q,p,o,n,m=this.b +m.O(a) +s=B.a.gA(m.c) +r=A.i([],t.hg) +for(m=m.d,q=A.x(m).h("X"),p=new A.X(m,q),p=new A.M(p,p.gn(0),q.h("M")),o=t.Q,q=q.h("G.E");p.p();){n=p.d +if(n==null)n=q.a(n) +if(n==null)break +else{o.a(n) +if(this.nh(n,s))B.a.l(r,n)}}if(r.length===3)B.a.W(m.a,B.a.gA(r)) +m.l(0,s)}, +ac(){var s,r,q,p +A:for(s=this.b.c,r=A.w(s).h("X<1>"),s=new A.X(s,r),s=new A.M(s,s.gn(0),r.h("M")),r=r.h("G.E");s.p();){q=s.d +if(q==null)q=r.a(q) +switch(q.x){case"dd":case"dt":case"li":case"p":case"tbody":case"td":case"tfoot":case"th":case"thead":case"tr":case"body":case"html":continue A}s=this.a +p=q.e +t.n.a(B.bi) +if(p==null){r=s.c.a +q=r.w +if(q==null)p=null +else{r=r.y +new A.bh(q,r).bh(q,r) +p=new A.aw(q,r,r) +p.aG(q,r,r)}}B.a.l(s.e,new A.bb("expected-closing-tag-but-got-eof",p,B.bi)) +break A}return!1}, +a3(a){var s +if(a.gaC()==="\x00")return null +s=this.b +s.aE() +s.bN(a.gaC(),a.a) +s=this.a +if(s.z&&!A.qQ(a.gaC()))s.z=!1 +return null}, +aJ(a){var s,r,q,p=this +if(p.c){s=a.gaC() +r=p.c=!1 +if(B.b.U(s,"\n")){q=B.a.gA(p.b.c) +if(B.a.C(B.jh,q.x)){r=q.gL() +r=r.gN(r)}if(r)s=B.b.ab(s,1)}if(s.length!==0){r=p.b +r.aE() +r.bN(s,a.a)}}else{r=p.b +r.aE() +r.bN(a.gaC(),a.a)}return null}, +js(a){var s,r,q=this.a +q.G(a.a,"unexpected-start-tag",A.v(["name","body"],t.N,t.X)) +s=this.b.c +r=s.length +if(r!==1){if(1>=r)return A.c(s,1) +s=s[1].x!=="body"}else s=!0 +if(!s){q.z=!1 +a.e.T(0,new A.mF(this))}}, +ju(a){var s,r,q,p,o=this.a +o.G(a.a,"unexpected-start-tag",A.v(["name","frameset"],t.N,t.X)) +s=this.b +r=s.c +q=r.length +if(q!==1){if(1>=q)return A.c(r,1) +p=r[1].x!=="body"}else p=!0 +if(!p)if(o.z){if(1>=q)return A.c(r,1) +q=r[1] +p=q.a +if(p!=null){p=p.gL() +if(1>=r.length)return A.c(r,1) +B.a.W(p.a,q)}while(B.a.gA(r).x!=="html"){if(0>=r.length)return A.c(r,-1) +r.pop()}s.O(a) +o.x=o.gem()}}, +fz(a){var s=this.b +if(s.a0("p","button"))this.bt(new A.H("p",!1)) +s.O(a)}, +jy(a){var s,r,q,p,o,n,m,l,k=this.a +k.z=!1 +s=a.b +s.toString +s=B.qF.m(0,s) +s.toString +for(r=this.b,q=r.c,p=A.w(q).h("X<1>"),q=new A.X(q,p),q=new A.M(q,q.gn(0),p.h("M")),p=p.h("G.E");q.p();){o=q.d +if(o==null)o=p.a(o) +n=o.x +if(B.a.C(s,n)){m=k.x +if(m===$)m=k.x=k.gbo() +m.P(new A.H(n,!1)) +break}l=o.w +if(B.cC.C(0,new A.l(l==null?"http://www.w3.org/1999/xhtml":l,n))&&!B.a.C(B.j3,n))break}if(r.a0("p","button"))k.gaD().P(new A.H("p",!1)) +r.O(a)}, +jt(a){var s=this.b,r=this.a +if(s.b6("button")){r.G(a.a,"unexpected-start-tag-implies-end-tag",A.v(["startName","button","endName","button"],t.N,t.X)) +this.P(new A.H("button",!1)) +return a}else{s.aE() +s.O(a) +r.z=!1}return null}, +fE(a){var s=this.b +s.aE() +s.O(a) +s=s.c +if(0>=s.length)return A.c(s,-1) +s.pop() +a.r=!0 +this.a.z=!1}, +jx(a){var s,r,q,p,o,n=this,m=null,l="action",k=t.N +n.a.G(a.a,"deprecated-tag",A.v(["name","isindex"],k,t.X)) +if(n.b.f!=null)return +s=t.K +r=A.ae(s,k) +q=a.e.m(0,l) +if(q!=null)r.k(0,l,q) +n.J(A.aZ("form",r,m,!1)) +n.J(A.aZ("hr",A.ae(s,k),m,!1)) +n.J(A.aZ("label",A.ae(s,k),m,!1)) +p=a.e.m(0,"prompt") +if(p==null)p="This is a searchable index. Enter search keywords: " +n.a3(new A.D(m,p)) +o=A.j2(a.e,s,k) +o.W(0,l) +o.W(0,"prompt") +o.k(0,"name","isindex") +n.J(A.aZ("input",o,m,a.c)) +n.P(new A.H("label",!1)) +n.J(A.aZ("hr",A.ae(s,k),m,!1)) +n.P(new A.H("form",!1))}, +bt(a){var s=this,r="unexpected-end-tag",q=s.b +if(!q.a0("p","button")){q=t.N +s.fz(A.aZ("p",A.ae(t.K,q),null,!1)) +s.a.G(a.a,r,A.v(["name","p"],q,t.X)) +s.bt(new A.H("p",!1))}else{q.bS("p") +if(B.a.gA(q.c).x!=="p")s.a.G(a.a,r,A.v(["name","p"],t.N,t.X)) +s.ct(a)}}, +i7(a){var s,r,q,p,o,n,m=this,l=m.b +if(!l.b6("body")){m.a.a2(a.a,"undefined-error") +return}else{l=l.c +if(B.a.gA(l).x==="body")B.a.gA(l) +else A:for(l=A.r1(l,2,null,t.Q),s=l.length,r=0;r=q.length)return A.c(q,-1) +q.pop() +s.bS(null)}break}q=s.c +o=B.a.gA(q) +n=a.b +if(o.x!=n)this.a.G(a.a,"end-tag-too-early",A.v(["name",n],t.N,t.X)) +for(r=0;r<6;++r)if(s.b6(B.cY[r])){if(0>=q.length)return A.c(q,-1) +m=q.pop() +while(!B.hS.C(0,m.x)){if(0>=q.length)return A.c(q,-1) +m=q.pop()}break}}, +i8(b4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3=null +for(s=this.b,r=s.d,q=r.a,p=A.x(r).h("b9.E"),o=s.c,n=t.K,m=t.N,l=t.Q,k=this.a,j=t.X,i=t.n,h=k.c.a,g=0;g<8;){++g +f=s.i5(b4.b) +if(f!=null)e=B.a.C(o,f)&&!s.b6(f.x) +else e=!0 +if(e){d=b4.a +s=i.a(A.v(["name",b4.b],m,j)) +if(d==null){r=h.w +if(r==null)d=b3 +else{q=h.y +new A.bh(r,q).bh(r,q) +d=new A.aw(r,q,q) +d.aG(r,q,q)}}B.a.l(k.e,new A.bb("adoption-agency-1.1",d,s)) +return}else if(!B.a.C(o,f)){d=b4.a +s=i.a(A.v(["name",b4.b],m,j)) +if(d==null){r=h.w +if(r==null)d=b3 +else{p=h.y +new A.bh(r,p).bh(r,p) +d=new A.aw(r,p,p) +d.aG(r,p,p)}}B.a.l(k.e,new A.bb("adoption-agency-1.2",d,s)) +B.a.W(q,f) +return}if(f!==B.a.gA(o)){d=b4.a +e=i.a(A.v(["name",b4.b],m,j)) +if(d==null){c=h.w +if(c==null)d=b3 +else{b=h.y +new A.bh(c,b).bh(c,b) +d=new A.aw(c,b,b) +d.aG(c,b,b)}}B.a.l(k.e,new A.bb("adoption-agency-1.3",d,e))}a=B.a.al(o,f) +e=A.r1(o,a,b3,l) +c=e.length +a1=0 +for(;;){if(!(a1=o.length)return A.c(o,-1) +a2=o.pop() +while(a2!==f){if(0>=o.length)return A.c(o,-1) +a2=o.pop()}B.a.W(q,a2) +return}e=a-1 +if(!(e>=0&&e=0&&a6"),p=new A.X(r,q),p=new A.M(p,p.gn(0),q.h("M")),q=q.h("G.E");p.p();){o=p.d +if(o==null)o=q.a(o) +n=o.x +m=a.b +if(n==m){l=B.a.gA(r).x +if(l!=m&&B.a.C(B.bH,l)){if(0>=r.length)return A.c(r,-1) +r.pop() +s.bS(m)}s=B.a.gA(r) +q=a.b +if(s.x!=q){s=this.a +k=a.a +q=t.n.a(A.v(["name",q],t.N,t.X)) +if(k==null){p=s.c.a +n=p.w +if(n==null)k=null +else{p=p.y +new A.bh(n,p).bh(n,p) +k=new A.aw(n,p,p) +k.aG(n,p,p)}}B.a.l(s.e,new A.bb(i,k,q))}for(;;){if(0>=r.length)return A.c(r,-1) +if(!(r.pop()!==o))break}break}else{j=o.w +if(B.cC.C(0,new A.l(j==null?"http://www.w3.org/1999/xhtml":j,n))){s=this.a +k=a.a +r=t.n.a(A.v(["name",a.b],t.N,t.X)) +if(k==null){q=s.c.a +p=q.w +if(p==null)k=null +else{q=q.y +new A.bh(p,q).bh(p,q) +k=new A.aw(p,q,q) +k.aG(p,q,q)}}B.a.l(s.e,new A.bb(i,k,r)) +break}}}}} +A.mF.prototype={ +$2(a,b){var s +A.cg(a) +A.q(b) +s=this.a.b.c +if(1>=s.length)return A.c(s,1) +s[1].b.f7(a,new A.mE(b))}, +$S:17} +A.mE.prototype={ +$0(){return this.a}, +$S:8} +A.jU.prototype={ +J(a){throw A.f(A.ce("Cannot process start stag in text phase"))}, +P(a){var s,r,q=this +if(a.b==="script"){s=q.b.c +if(0>=s.length)return A.c(s,-1) +s.pop() +s=q.a +r=s.y +r.toString +s.x=r +return null}s=q.b.c +if(0>=s.length)return A.c(s,-1) +s.pop() +s=q.a +r=s.y +r.toString +s.x=r +return null}, +a3(a){this.b.bN(a.gaC(),a.a) +return null}, +ac(){var s=this.b.c,r=B.a.gA(s),q=this.a +q.G(r.e,"expected-named-closing-tag-but-got-eof",A.v(["name",r.x],t.N,t.X)) +if(0>=s.length)return A.c(s,-1) +s.pop() +s=q.y +s.toString +q.x=s +return!0}} +A.iL.prototype={ +J(a){var s,r,q=this,p=null +switch(a.b){case"html":return q.bg(a) +case"caption":q.eE() +s=q.b +s.d.l(0,p) +s.O(a) +s=q.a +s.x=s.gek() +return p +case"colgroup":q.fA(a) +return p +case"col":q.fA(A.aZ("colgroup",A.ae(t.K,t.N),p,!1)) +return a +case"tbody":case"tfoot":case"thead":q.fC(a) +return p +case"td":case"th":case"tr":q.fC(A.aZ("tbody",A.ae(t.K,t.N),p,!1)) +return a +case"table":return q.jz(a) +case"style":case"script":return q.a.gc0().J(a) +case"input":s=a.e.m(0,"type") +if((s==null?p:A.c9(s))==="hidden"){q.a.a2(a.a,"unexpected-hidden-input-in-table") +s=q.b +s.O(a) +s=s.c +if(0>=s.length)return A.c(s,-1) +s.pop()}else q.fB(a) +return p +case"form":q.a.a2(a.a,"unexpected-form-in-table") +s=q.b +if(s.f==null){s.O(a) +r=s.c +s.f=B.a.gA(r) +if(0>=r.length)return A.c(r,-1) +r.pop()}return p +default:q.fB(a) +return p}}, +P(a){var s,r=this,q=a.b +switch(q){case"table":r.bM(a) +return null +case"body":case"caption":case"col":case"colgroup":case"html":case"tbody":case"td":case"tfoot":case"th":case"thead":case"tr":r.a.G(a.a,"unexpected-end-tag",A.v(["name",q],t.N,t.X)) +return null +default:s=r.a +s.G(a.a,"unexpected-end-tag-implies-table-voodoo",A.v(["name",q],t.N,t.X)) +q=r.b +q.r=!0 +s.ga4().P(a) +q.r=!1 +return null}}, +eE(){var s=this.b.c +for(;;){if(!(B.a.gA(s).x!=="table"&&B.a.gA(s).x!=="html"))break +if(0>=s.length)return A.c(s,-1) +s.pop()}}, +ac(){var s=B.a.gA(this.b.c) +if(s.x!=="html")this.a.a2(s.e,"eof-in-table") +return!1}, +aJ(a){var s=this.a,r=s.gaD(),q=s.gen() +s.x=q +q.c=r +s.gaD().aJ(a) +return null}, +a3(a){var s=this.a,r=s.gaD(),q=s.gen() +s.x=q +q.c=r +s.gaD().a3(a) +return null}, +fA(a){var s +this.eE() +this.b.O(a) +s=this.a +s.x=s.gel()}, +fC(a){var s +this.eE() +this.b.O(a) +s=this.a +s.x=s.gcj()}, +jz(a){var s=this.a +s.G(a.a,"unexpected-start-tag-implies-end-tag",A.v(["startName","table","endName","table"],t.N,t.X)) +s.gaD().P(new A.H("table",!1)) +return a}, +fB(a){var s,r=this.a +r.G(a.a,u.M,A.v(["name",a.b],t.N,t.X)) +s=this.b +s.r=!0 +r.ga4().J(a) +s.r=!1}, +bM(a){var s,r=this,q=r.b +if(q.a0("table","table")){q.cc() +q=q.c +s=B.a.gA(q).x +if(s!=="table")r.a.G(a.a,"end-tag-too-early-named",A.v(["gotName","table","expectedName",s],t.N,t.X)) +while(B.a.gA(q).x!=="table"){if(0>=q.length)return A.c(q,-1) +q.pop()}if(0>=q.length)return A.c(q,-1) +q.pop() +r.a.ix()}else r.a.a2(a.a,"undefined-error")}} +A.fg.prototype={ +cP(){var s,r,q=this,p=q.d +if(p.length===0)return +s=A.w(p) +r=new A.Q(p,s.h("e(1)").a(new A.mG()),s.h("Q<1,e>")).aq(0,"") +if(!A.qQ(r)){p=q.a.gaA() +s=p.b +s.r=!0 +p.a.ga4().a3(new A.D(null,r)) +s.r=!1}else if(r.length!==0)q.b.bN(r,null) +q.d=A.i([],t.ks)}, +cb(a){var s +this.cP() +s=this.c +s.toString +this.a.x=s +return a}, +ac(){this.cP() +var s=this.c +s.toString +this.a.x=s +return!0}, +a3(a){if(a.gaC()==="\x00")return null +B.a.l(this.d,a) +return null}, +aJ(a){B.a.l(this.d,a) +return null}, +J(a){var s +this.cP() +s=this.c +s.toString +this.a.x=s +return a}, +P(a){var s +this.cP() +s=this.c +s.toString +this.a.x=s +return a}} +A.mG.prototype={ +$1(a){return t.v.a(a).gaC()}, +$S:101} +A.iB.prototype={ +J(a){switch(a.b){case"html":return this.bg(a) +case"caption":case"col":case"colgroup":case"tbody":case"td":case"tfoot":case"th":case"thead":case"tr":return this.jA(a) +default:return this.a.ga4().J(a)}}, +P(a){var s=this,r=a.b +switch(r){case"caption":s.mV(a) +return null +case"table":return s.bM(a) +case"body":case"col":case"colgroup":case"html":case"tbody":case"td":case"tfoot":case"th":case"thead":case"tr":s.a.G(a.a,"unexpected-end-tag",A.v(["name",r],t.N,t.X)) +return null +default:return s.a.ga4().P(a)}}, +ac(){this.a.ga4().ac() +return!1}, +a3(a){return this.a.ga4().a3(a)}, +jA(a){var s,r=this.a +r.a2(a.a,"undefined-error") +s=this.b.a0("caption","table") +r.gaD().P(new A.H("caption",!1)) +if(s)return a +return null}, +mV(a){var s,r=this,q=r.b +if(q.a0("caption","table")){q.cc() +s=q.c +if(B.a.gA(s).x!=="caption")r.a.G(a.a,"expected-one-end-tag-but-got-another",A.v(["gotName","caption","expectedName",B.a.gA(s).x],t.N,t.X)) +while(B.a.gA(s).x!=="caption"){if(0>=s.length)return A.c(s,-1) +s.pop()}if(0>=s.length)return A.c(s,-1) +s.pop() +q.eC() +q=r.a +q.x=q.gaA()}else r.a.a2(a.a,"undefined-error")}, +bM(a){var s,r=this.a +r.a2(a.a,"undefined-error") +s=this.b.a0("caption","table") +r.gaD().P(new A.H("caption",!1)) +if(s)return a +return null}} +A.iD.prototype={ +J(a){var s,r=this +switch(a.b){case"html":return r.bg(a) +case"col":s=r.b +s.O(a) +s=s.c +if(0>=s.length)return A.c(s,-1) +s.pop() +return null +default:s=B.a.gA(r.b.c) +r.cN(new A.H("colgroup",!1)) +return s.x==="html"?null:a}}, +P(a){var s,r=this +switch(a.b){case"colgroup":r.cN(a) +return null +case"col":r.a.G(a.a,"no-end-tag",A.v(["name","col"],t.N,t.X)) +return null +default:s=B.a.gA(r.b.c) +r.cN(new A.H("colgroup",!1)) +return s.x==="html"?null:a}}, +ac(){if(B.a.gA(this.b.c).x==="html")return!1 +else{this.cN(new A.H("colgroup",!1)) +return!0}}, +a3(a){var s=B.a.gA(this.b.c) +this.cN(new A.H("colgroup",!1)) +return s.x==="html"?null:a}, +cN(a){var s=this.b.c,r=this.a +if(B.a.gA(s).x==="html")r.a2(a.a,"undefined-error") +else{if(0>=s.length)return A.c(s,-1) +s.pop() +r.x=r.gaA()}}} +A.iK.prototype={ +J(a){var s,r=this,q=a.b +switch(q){case"html":return r.bg(a) +case"tr":r.fD(a) +return null +case"td":case"th":s=t.N +r.a.G(a.a,"unexpected-cell-in-table-body",A.v(["name",q],s,t.X)) +r.fD(A.aZ("tr",A.ae(t.K,s),null,!1)) +return a +case"caption":case"col":case"colgroup":case"tbody":case"tfoot":case"thead":return r.bM(a) +default:return r.a.gaA().J(a)}}, +P(a){var s=this,r=a.b +switch(r){case"tbody":case"tfoot":case"thead":s.dG(a) +return null +case"table":return s.bM(a) +case"body":case"caption":case"col":case"colgroup":case"html":case"td":case"th":case"tr":s.a.G(a.a,"unexpected-end-tag-in-table-body",A.v(["name",r],t.N,t.X)) +return null +default:return s.a.gaA().P(a)}}, +eD(){for(var s=this.b.c;!B.a.C(B.jk,B.a.gA(s).x);){if(0>=s.length)return A.c(s,-1) +s.pop()}B.a.gA(s)}, +ac(){this.a.gaA().ac() +return!1}, +aJ(a){return this.a.gaA().aJ(a)}, +a3(a){return this.a.gaA().a3(a)}, +fD(a){var s +this.eD() +this.b.O(a) +s=this.a +s.x=s.gdk()}, +dG(a){var s=this.b,r=this.a +if(s.a0(a.b,"table")){this.eD() +s=s.c +if(0>=s.length)return A.c(s,-1) +s.pop() +r.x=r.gaA()}else r.G(a.a,"unexpected-end-tag-in-table-body",A.v(["name",a.b],t.N,t.X))}, +bM(a){var s=this,r="table",q=s.b +if(q.a0("tbody",r)||q.a0("thead",r)||q.a0("tfoot",r)){s.eD() +s.dG(new A.H(B.a.gA(q.c).x,!1)) +return a}else s.a.a2(a.a,"undefined-error") +return null}} +A.iH.prototype={ +J(a){var s,r,q=this +switch(a.b){case"html":return q.bg(a) +case"td":case"th":q.hV() +s=q.b +s.O(a) +r=q.a +r.x=r.gdj() +s.d.l(0,null) +return null +case"caption":case"col":case"colgroup":case"tbody":case"tfoot":case"thead":case"tr":s=q.b.a0("tr","table") +q.dH(new A.H("tr",!1)) +return!s?null:a +default:return q.a.gaA().J(a)}}, +P(a){var s=this,r=a.b +switch(r){case"tr":s.dH(a) +return null +case"table":r=s.b.a0("tr","table") +s.dH(new A.H("tr",!1)) +return!r?null:a +case"tbody":case"tfoot":case"thead":return s.dG(a) +case"body":case"caption":case"col":case"colgroup":case"html":case"td":case"th":s.a.G(a.a,"unexpected-end-tag-in-table-row",A.v(["name",r],t.N,t.X)) +return null +default:return s.a.gaA().P(a)}}, +hV(){var s,r,q,p,o,n,m,l,k,j,i +for(s=this.b.c,r=this.a,q=t.N,p=t.X,o=t.n,n=r.c.a;;){m=B.a.gA(s) +l=m.x +if(l==="tr"||l==="html")break +k=m.e +l=o.a(A.v(["name",B.a.gA(s).x],q,p)) +if(k==null){j=n.w +if(j==null)k=null +else{i=n.y +new A.bh(j,i).bh(j,i) +k=new A.aw(j,i,i) +k.aG(j,i,i)}}B.a.l(r.e,new A.bb("unexpected-implied-end-tag-in-table-row",k,l)) +if(0>=s.length)return A.c(s,-1) +s.pop()}}, +ac(){this.a.gaA().ac() +return!1}, +aJ(a){return this.a.gaA().aJ(a)}, +a3(a){return this.a.gaA().a3(a)}, +dH(a){var s=this.b,r=this.a +if(s.a0("tr","table")){this.hV() +s=s.c +if(0>=s.length)return A.c(s,-1) +s.pop() +r.x=r.gcj()}else r.a2(a.a,"undefined-error")}, +dG(a){if(this.b.a0(a.b,"table")){this.dH(new A.H("tr",!1)) +return a}else{this.a.a2(a.a,"undefined-error") +return null}}} +A.iC.prototype={ +J(a){switch(a.b){case"html":return this.bg(a) +case"caption":case"col":case"colgroup":case"tbody":case"td":case"tfoot":case"th":case"thead":case"tr":return this.jB(a) +default:return this.a.ga4().J(a)}}, +P(a){var s=this,r=a.b +switch(r){case"td":case"th":s.eR(a) +return null +case"body":case"caption":case"col":case"colgroup":case"html":s.a.G(a.a,"unexpected-end-tag",A.v(["name",r],t.N,t.X)) +return null +case"table":case"tbody":case"tfoot":case"thead":case"tr":return s.mX(a) +default:return s.a.ga4().P(a)}}, +hW(){var s=this.b +if(s.a0("td","table"))this.eR(new A.H("td",!1)) +else if(s.a0("th","table"))this.eR(new A.H("th",!1))}, +ac(){this.a.ga4().ac() +return!1}, +a3(a){return this.a.ga4().a3(a)}, +jB(a){var s=this.b +if(s.a0("td","table")||s.a0("th","table")){this.hW() +return a}else{this.a.a2(a.a,"undefined-error") +return null}}, +eR(a){var s,r=this,q=r.b,p=q.a0(a.b,"table"),o=a.b +if(p){q.bS(o) +p=q.c +o=B.a.gA(p) +s=a.b +if(o.x!=s){r.a.G(a.a,"unexpected-cell-end-tag",A.v(["name",s],t.N,t.X)) +r.ct(a)}else{if(0>=p.length)return A.c(p,-1) +p.pop()}q.eC() +q=r.a +q.x=q.gdk()}else r.a.G(a.a,"unexpected-end-tag",A.v(["name",o],t.N,t.X))}, +mX(a){if(this.b.a0(a.b,"table")){this.hW() +return a}else this.a.a2(a.a,"undefined-error") +return null}} +A.iJ.prototype={ +J(a){var s,r=this,q=null,p=a.b +switch(p){case"html":return r.bg(a) +case"option":p=r.b +s=p.c +if(B.a.gA(s).x==="option"){if(0>=s.length)return A.c(s,-1) +s.pop()}p.O(a) +return q +case"optgroup":p=r.b +s=p.c +if(B.a.gA(s).x==="option"){if(0>=s.length)return A.c(s,-1) +s.pop()}if(B.a.gA(s).x==="optgroup"){if(0>=s.length)return A.c(s,-1) +s.pop()}p.O(a) +return q +case"select":r.a.a2(a.a,"unexpected-select-in-select") +r.eQ(new A.H("select",!1)) +return q +case"input":case"keygen":case"textarea":return r.jw(a) +case"script":return r.a.gc0().J(a) +default:r.a.G(a.a,"unexpected-start-tag-in-select",A.v(["name",p],t.N,t.X)) +return q}}, +P(a){var s,r,q=this,p=null,o="unexpected-end-tag-in-select",n=a.b +switch(n){case"option":n=q.b.c +if(B.a.gA(n).x==="option"){if(0>=n.length)return A.c(n,-1) +n.pop()}else q.a.G(a.a,o,A.v(["name","option"],t.N,t.X)) +return p +case"optgroup":n=q.b.c +if(B.a.gA(n).x==="option"){s=n.length +r=s-2 +if(!(r>=0))return A.c(n,r) +r=n[r].x==="optgroup" +s=r}else s=!1 +if(s){if(0>=n.length)return A.c(n,-1) +n.pop()}if(B.a.gA(n).x==="optgroup"){if(0>=n.length)return A.c(n,-1) +n.pop()}else q.a.G(a.a,o,A.v(["name","optgroup"],t.N,t.X)) +return p +case"select":q.eQ(a) +return p +default:q.a.G(a.a,o,A.v(["name",n],t.N,t.X)) +return p}}, +ac(){var s=B.a.gA(this.b.c) +if(s.x!=="html")this.a.a2(s.e,"eof-in-select") +return!1}, +a3(a){if(a.gaC()==="\x00")return null +this.b.bN(a.gaC(),a.a) +return null}, +jw(a){var s="select" +this.a.a2(a.a,"unexpected-input-in-select") +if(this.b.a0(s,s)){this.eQ(new A.H(s,!1)) +return a}return null}, +eQ(a){var s=this.a +if(this.b.a0("select","select")){this.ct(a) +s.ix()}else s.a2(a.a,"undefined-error")}} +A.iI.prototype={ +J(a){var s,r=a.b +switch(r){case"caption":case"table":case"tbody":case"tfoot":case"thead":case"tr":case"td":case"th":s=this.a +s.G(a.a,u.a,A.v(["name",r],t.N,t.X)) +s.gbH().P(new A.H("select",!1)) +return a +default:return this.a.gbH().J(a)}}, +P(a){switch(a.b){case"caption":case"table":case"tbody":case"tfoot":case"thead":case"tr":case"td":case"th":return this.bM(a) +default:return this.a.gbH().P(a)}}, +ac(){this.a.gbH().ac() +return!1}, +a3(a){return this.a.gbH().a3(a)}, +bM(a){var s=this.a +s.G(a.a,u.r,A.v(["name",a.b],t.N,t.X)) +if(this.b.a0(a.b,"table")){s.gbH().P(new A.H("select",!1)) +return a}return null}} +A.iE.prototype={ +a3(a){var s +if(a.gaC()==="\x00"){a.c="\ufffd" +a.b=null}else{s=this.a +if(s.z&&!A.qQ(a.gaC()))s.z=!1}return this.jN(a)}, +J(a){var s,r,q,p=this,o=p.b,n=o.c,m=B.a.gA(n) +if(!B.a.C(B.j5,a.b))if(a.b==="font")s=a.e.a7("color")||a.e.a7("face")||a.e.a7("size") +else s=!1 +else s=!0 +if(s){s=p.a +s.G(a.a,u.G,A.v(["name",a.b],t.N,t.X)) +o=o.a +for(;;){r=!1 +if(B.a.gA(n).w!=o)if(!s.ic(B.a.gA(n))){r=B.a.gA(n) +r=!B.hP.C(0,new A.l(r.w,r.x))}if(!r)break +if(0>=n.length)return A.c(n,-1) +n.pop()}return a}else{s=m.w +if(s==="http://www.w3.org/1998/Math/MathML")p.a.hH(a) +else if(s==="http://www.w3.org/2000/svg"){q=B.rp.m(0,a.b) +if(q!=null)a.b=q +p.a.hI(a)}p.a.ex(a) +a.w=s +o.O(a) +if(a.c){if(0>=n.length)return A.c(n,-1) +n.pop() +a.r=!0}return null}}, +P(a){var s,r,q,p=this,o=p.b,n=o.c,m=n.length-1,l=B.a.gA(n),k=l.x +k=k==null?null:A.c9(k) +s=a.b +if(k!=s)p.a.G(a.a,"unexpected-end-tag",A.v(["name",s],t.N,t.X)) +for(o=o.a;r=null,!0;){k=l.x +k=k==null?null:A.c9(k) +if(k==a.b){o=p.a +q=o.x +if(q===$)q=o.x=o.gbo() +if(q===o.gen()){q=o.x +if(q===$)q=o.x=o.gbo() +t.aB.a(q) +q.cP() +k=q.c +k.toString +o.x=k}for(;;){if(0>=n.length)return A.c(n,-1) +if(!(n.pop()!==l))break}break}--m +if(!(m>=0&&m=r.length)return A.c(r,0) +s.cr(a,r[0]) +return null}, +a3(a){var s=this.a +s.a2(a.a,"unexpected-char-after-body") +s.x=s.ga4() +return a}, +eP(a){var s,r,q,p +for(s=this.b.c,r=A.w(s).h("X<1>"),s=new A.X(s,r),s=new A.M(s,s.gn(0),r.h("M")),r=r.h("G.E");s.p();){q=s.d +if((q==null?r.a(q):q).x==="html")break}s=this.a +p=s.k4 +s.x=p===$?s.k4=new A.hI(s,s.d):p}} +A.iF.prototype={ +J(a){var s=this,r=a.b +switch(r){case"html":return s.bg(a) +case"frameset":s.b.O(a) +return null +case"frame":r=s.b +r.O(a) +r=r.c +if(0>=r.length)return A.c(r,-1) +r.pop() +return null +case"noframes":return s.a.ga4().J(a) +default:s.a.G(a.a,"unexpected-start-tag-in-frameset",A.v(["name",r],t.N,t.X)) +return null}}, +P(a){var s,r=this,q=a.b +switch(q){case"frameset":q=r.b.c +if(B.a.gA(q).x==="html")r.a.a2(a.a,u.q) +else{if(0>=q.length)return A.c(q,-1) +q.pop()}q=B.a.gA(q) +if(q.x!=="frameset"){q=r.a +s=q.k3 +q.x=s===$?q.k3=new A.hL(q,q.d):s}return null +default:r.a.G(a.a,"unexpected-end-tag-in-frameset",A.v(["name",q],t.N,t.X)) +return null}}, +ac(){var s=B.a.gA(this.b.c) +if(s.x!=="html")this.a.a2(s.e,"eof-in-frameset") +return!1}, +a3(a){this.a.a2(a.a,"unexpected-char-in-frameset") +return null}} +A.hL.prototype={ +J(a){var s=a.b +switch(s){case"html":return this.bg(a) +case"noframes":return this.a.gc0().J(a) +default:this.a.G(a.a,"unexpected-start-tag-after-frameset",A.v(["name",s],t.N,t.X)) +return null}}, +P(a){var s,r=a.b,q=this.a +switch(r){case"html":s=q.ok +q.x=s===$?q.ok=new A.hJ(q,q.d):s +return null +default:q.G(a.a,"unexpected-end-tag-after-frameset",A.v(["name",r],t.N,t.X)) +return null}}, +ac(){return!1}, +a3(a){this.a.a2(a.a,"unexpected-char-after-frameset") +return null}} +A.hI.prototype={ +J(a){var s,r=a.b +if(r==="html")return this.a.ga4().J(a) +s=this.a +s.G(a.a,"expected-eof-but-got-start-tag",A.v(["name",r],t.N,t.X)) +s.x=s.ga4() +return a}, +ac(){return!1}, +cb(a){var s=this.b,r=s.b +r===$&&A.o() +s.cr(a,r) +return null}, +aJ(a){return this.a.ga4().aJ(a)}, +a3(a){var s=this.a +s.a2(a.a,"expected-eof-but-got-char") +s.x=s.ga4() +return a}, +P(a){var s=this.a +s.G(a.a,"expected-eof-but-got-end-tag",A.v(["name",a.b],t.N,t.X)) +s.x=s.ga4() +return a}} +A.hJ.prototype={ +J(a){var s=a.b,r=this.a +switch(s){case"html":return r.ga4().J(a) +case"noframes":return r.gc0().J(a) +default:r.G(a.a,"expected-eof-but-got-start-tag",A.v(["name",s],t.N,t.X)) +return null}}, +ac(){return!1}, +cb(a){var s=this.b,r=s.b +r===$&&A.o() +s.cr(a,r) +return null}, +aJ(a){return this.a.ga4().aJ(a)}, +a3(a){this.a.a2(a.a,"expected-eof-but-got-char") +return null}, +P(a){this.a.G(a.a,"expected-eof-but-got-end-tag",A.v(["name",a.b],t.N,t.X)) +return null}} +A.bb.prototype={ +j(a){var s,r,q=this,p=q.b +if(p==null){p=B.fX.m(0,q.a) +p.toString +return A.ut(p,q.c)}s=B.fX.m(0,q.a) +s.toString +r=p.ig(A.ut(s,q.c),null) +return p.a.a==null?"ParserError on "+r:"On "+r}, +$iaj:1} +A.nB.prototype={} +A.ia.prototype={ +d0(){var s,r,q,p,o=A.w2(t.N),n=this.a.b.m(0,"class") +for(s=(n==null?"":n).split(" "),r=s.length,q=0;q=this.a.length)throw A.f(A.qx("No more elements")) +this.b=a}, +gau(){var s=this.b +if(s>=this.a.length)throw A.f(A.qx("No more elements")) +if(s>=0)return s +else return 0}, +kZ(a){var s,r,q,p,o=this +t.pi.a(a) +if(a==null)a=A.um() +s=o.gau() +for(r=o.a,q=r.length;s=0))return A.c(r,s) +p=r[s] +if(!a.$1(p)){o.b=s +return p}++s}o.b=s +return null}, +hq(){return this.kZ(null)}, +l_(a){var s,r,q,p +t.dB.a(a) +s=this.gau() +for(r=this.a,q=r.length;s=0))return A.c(r,s) +p=r[s] +if(a.$1(p)){this.b=s +return p}++s}return null}, +hb(a){var s=B.b.ap(this.a,a,this.gau()) +if(s>=0){this.b=s+a.length-1 +return!0}else throw A.f(A.qx("No more elements"))}, +es(a,b){if(b==null)b=this.a.length +if(b<0)b+=this.a.length +return B.b.t(this.a,a,b)}, +l0(a){return this.es(a,null)}} +A.lN.prototype={ +nE(){var s,r,q,p,o,n,m,l +try{p=this.a +p.hb("charset") +p.sau(p.gau()+1) +p.hq() +o=p.a +n=p.gau() +m=o.length +if(!(n>=0&&n=0&&n=0&&n=0&&n0){r=h.x +q=r.length +B.a.fc(r,q-n,q)}}, +hS(a){var s=A.ce("cannot change encoding when parsing a String.") +throw A.f(s)}, +D(){var s,r,q,p,o=this,n=o.y,m=o.x,l=m.length +if(n>=l)return null +s=o.y=n+1 +if(!(n>=0))return A.c(m,n) +r=m[n] +if(r<256)return B.j4[r] +n=s-1 +t.L.a(m) +q=n+1 +p=!1 +if(q=0))return A.c(m,n) +if((m[n]&64512)===55296){if(!(q>=0))return A.c(m,q) +n=(m[q]&64512)===56320}else n=p}else n=p +if(n){o.y=s+1 +if(!(s>=0&&s=q)return null +if(!(s>=0))return A.c(r,s) +return r[s]}, +lZ(a){var s,r,q=this +t.nO.a(a) +s=q.y +for(;;){r=q.cs() +if(!(r!=null&&!a.C(0,r)))break;++q.y}return A.aA(B.a.am(q.x,s,q.y),0,null)}, +hT(a){var s,r=this,q=r.y +for(;;){s=r.cs() +if(!(s!=null&&a!==s))break;++r.y}return A.aA(B.a.am(r.x,q,r.y),0,null)}, +co(a,b){var s,r,q=this,p=q.y +for(;;){s=q.cs() +if(s!=null)r=!(a===s||b===s) +else r=!1 +if(!r)break;++q.y}return A.aA(B.a.am(q.x,p,q.y),0,null)}, +hU(a,b,c){var s,r,q=this,p=q.y +for(;;){s=q.cs() +if(s!=null)r=!(a===s||b===s||c===s) +else r=!1 +if(!r)break;++q.y}return A.aA(B.a.am(q.x,p,q.y),0,null)}, +m_(a){var s,r,q=this,p=q.y +for(;;){s=q.cs() +if(s!=null)if(!(s>=65&&s<=90))r=s>=97&&s<=122 +else r=!0 +else r=!1 +if(!r)break;++q.y}return A.aA(B.a.am(q.x,p,q.y),0,null)}, +cL(a){var s,r,q=this,p=q.y +for(;;){s=q.cs() +if(s!=null)r=s===32||s===10||s===13||s===9||s===12 +else r=!1 +if(!r)break;++q.y}return A.aA(B.a.am(q.x,p,q.y),0,null)}, +X(a){if(a!=null)this.y=this.y-a.length}} +A.b9.prototype={ +gn(a){return this.a.length}, +gF(a){var s=this.a +return new J.J(s,s.length,A.w(s).h("J<1>"))}, +m(a,b){var s=this.a +if(!(b>=0&&b").a(b))}} +A.d0.prototype={ +f8(a,b){var s,r,q,p,o,n,m +for(s=a.gL().gF(0),r=new A.bZ(s,t.pl),q=b.b,p=this.gfn(),o=t.Q;r.p();){n=o.a(s.gB()) +this.a=n +if(B.a.aH(q,p))return n +m=this.f8(n,b) +if(m!=null)return m}return null}, +f9(a,b,c){var s,r,q,p,o,n +t.jB.a(c) +for(s=a.gL().gF(0),r=new A.bZ(s,t.pl),q=b.b,p=this.gfn(),o=t.Q;r.p();){n=o.a(s.gB()) +this.a=n +if(B.a.aH(q,p))B.a.l(c,n) +this.f9(n,b,c)}}, +iF(a){var s,r,q,p,o,n,m,l,k,j,i=this,h=null +t.dT.a(a) +s=i.a +for(r=a.b,q=A.w(r).h("X<1>"),r=new A.X(r,q),r=new A.M(r,r.gn(0),q.h("M")),q=q.h("G.E"),p=h;o=!0,r.p();){n=r.d +if(n==null)n=q.a(n) +if(p==null)o=A.hA(n.c.M(i)) +else{if(p===514){m=n.c +do{l=i.a.a +k=l instanceof A.K?l:h +i.a=k}while(k!=null&&!A.hA(m.M(i))) +m=i.a +o=m!=null}else if(p===517){m=n.c +do{k=i.a.gdR() +i.a=k}while(k!=null&&!A.hA(m.M(i))) +m=i.a +o=m!=null}p=h}if(!o)break +j=n.b +switch(j){case 515:i.a=i.a.gdR() +break +case 516:l=i.a.a +i.a=l instanceof A.K?l:h +break +case 514:case 517:p=j +break +case 513:break +default:throw A.f(i.hz(a))}if(i.a==null){o=!1 +break}}i.a=s +return o}, +cK(a){return new A.fW("'"+a.j(0)+"' selector of type "+A.cN(a).j(0)+" is not implemented")}, +hz(a){return new A.aC("'"+a.j(0)+"' is not a valid selector",null,null)}, +op(a){var s=this,r=a.b +switch(r.ga8()){case"root":r=s.a +return r.x==="html"&&r.a==null +case"empty":r=s.a.gL() +return r.aH(r,new A.nI()) +case"blank":r=s.a.gL() +return r.aH(r,new A.nJ()) +case"first-child":return s.a.gdR()==null +case"last-child":return s.a.gii()==null +case"only-child":return s.a.gdR()==null&&s.a.gii()==null +case"link":return s.a.b.m(0,"href")!=null +case"visited":return!1}if(A.rW(r.ga8()))return!1 +throw A.f(s.cK(a))}, +or(a){if(A.rW(a.b.ga8()))return!1 +throw A.f(this.cK(a))}, +oq(a){return A.P(this.cK(a))}, +oo(a){var s,r,q,p,o,n,m=this +switch(a.b.ga8()){case"nth-child":s=t.b9.a(a.f).b +r=s.length +if(r===1){if(0>=r)return A.c(s,0) +q=s[0] instanceof A.al}else q=!1 +if(q){if(0>=r)return A.c(s,0) +r=t.mH.a(s[0]).c +if(typeof r!="number")return!1 +p=m.a.a +q=!1 +if(p!=null)if(r>0){q=p.gL() +r=q.al(q,m.a)===r}else r=q +else r=q +return r}break +case"lang":r=t.b9.a(a.f) +r=r.a +r.toString +o=A.aA(B.aA.am(r.a.c,r.b,r.c),0,null) +n=A.wL(m.a) +return n!=null&&B.b.U(n,o)}throw A.f(m.cK(a))}, +on(a){if(!A.hA(t.g9.a(a.b).M(this)))return!1 +if(a.d instanceof A.d4)return!0 +if(a.gih()==="")return this.a.w==null +throw A.f(this.cK(a))}, +oj(a){var s,r,q,p=this.a.b.m(0,a.b.ga8().toLowerCase()) +if(p==null)return!1 +s=a.d +if(s===535)return!0 +r=A.k(a.e) +A:{if(28===s){s=p===r +break A}if(530===s){s=B.a.aH(A.i(p.split(" "),t.s),new A.nG(r)) +break A}if(531===s){if(B.b.U(p,r)){s=p.length +q=r.length +if(s!==q){if(!(q1114111){l=A.v(["charAsInt",n],t.N,t.X) +k.i(new A.j(l,j,i)) +m="\ufffd"}else{l=!0 +if(!(1<=n&&n<=8))if(!(14<=n&&n<=31))if(!(127<=n&&n<=159))l=64976<=n&&n<=65007||B.a.C(B.jj,n) +if(l){l=A.v(["charAsInt",n],t.N,t.X) +k.i(new A.j(l,j,i))}m=A.aA(A.i([n],t.Z),0,j)}if(o!==";"){k.i(new A.j(j,j,"numeric-entity-without-semicolon")) +p.X(o)}return m}, +dF(a,b){var s,r,q,p,o,n,m,l,k,j=this,i=null,h=j.a,g=A.i([h.D()],t.mf) +if(0>=g.length)return A.c(g,0) +if(!A.a8(g[0])){if(0>=g.length)return A.c(g,0) +s=g[0] +s=s==="<"||s==="&"||s==null||a===s}else s=!0 +if(s){if(0>=g.length)return A.c(g,0) +h.X(g[0]) +r="&"}else{if(0>=g.length)return A.c(g,0) +if(g[0]==="#"){B.a.l(g,h.D()) +q=B.a.gA(g)==="x"||B.a.gA(g)==="X" +if(q)B.a.l(g,h.D()) +if(!(q&&A.uy(B.a.gA(g))))s=!q&&A.pJ(B.a.gA(g)) +else s=!0 +if(s){h.X(B.a.gA(g)) +r=j.me(q)}else{j.i(new A.j(i,i,"expected-numeric-entity")) +if(0>=g.length)return A.c(g,-1) +h.X(g.pop()) +r="&"+B.a.aQ(g)}}else{s=B.a.gA(g) +if(s==null)s=i +else{if(0>=s.length)return A.c(s,0) +s=s.charCodeAt(0)}p=B.kS.m(0,s) +for(;;){if(!(p!=null&&B.a.gA(g)!=null))break +B.a.l(g,h.D()) +s=B.a.gA(g) +if(s==null)s=i +else{if(0>=s.length)return A.c(s,0) +s=s.charCodeAt(0)}p=p.m(0,s)}n=g.length-1 +for(;;){if(!(n>1)){o=i +break}m=B.a.aQ(B.a.am(g,0,n)) +if(B.fs.a7(m)){o=m +break}--n}if(o!=null){s=o.length +l=s-1 +if(!(l>=0))return A.c(o,l) +s=o[l]!==";" +if(s)j.i(new A.j(i,i,"named-entity-without-semicolon")) +l=!1 +if(s)if(b){if(!(n>=0&&n=g.length)return A.c(g,-1) +h.X(g.pop()) +r="&"+B.a.aQ(g)}else{r=B.fs.m(0,o) +if(0>=g.length)return A.c(g,-1) +h.X(g.pop()) +r=A.k(r)+B.a.aQ(A.r1(g,n,i,t.jv))}}else{if(!b)j.i(new A.j(i,i,"expected-named-entity")) +if(0>=g.length)return A.c(g,-1) +h.X(g.pop()) +r="&"+B.a.aQ(g)}}}if(b)j.ay.a+=r +else{if(A.a8(r))k=new A.dC(i,r) +else k=new A.D(i,r) +j.i(k)}}, +i0(){return this.dF(null,!1)}, +b7(){var s,r,q,p,o,n,m=this,l=null,k=m.w +k.toString +if(k instanceof A.cA){s=k.b +k.b=s==null?l:A.c9(s) +if(k instanceof A.H){if(m.Q!=null)m.i(new A.j(l,l,"attributes-in-end-tag")) +if(k.c)m.i(new A.j(l,l,"this-closing-flag-on-end-tag"))}else if(k instanceof A.d2){k.saC(A.ae(t.K,t.N)) +s=m.Q +if(s!=null)for(r=s.length,q=0;q"){s.i(new A.j(r,r,"expected-tag-name-but-got-right-bracket")) +s.i(new A.D(r,"<>")) +s.x=t.c.a(s.gE())}else if(p==="?"){s.i(new A.j(r,r,"expected-tag-name-but-got-question-mark")) +q.X(p) +s.x=t.c.a(s.geB())}else{s.i(new A.j(r,r,"expected-tag-name")) +s.i(new A.D(r,"<")) +q.X(p) +s.x=t.c.a(s.gE())}return!0}, +m2(){var s,r=this,q=null,p=r.a,o=p.D() +if(A.b4(o)){r.w=new A.H(o,!1) +r.x=t.c.a(r.giA())}else if(o===">"){r.i(new A.j(q,q,u.g)) +r.x=t.c.a(r.gE())}else if(o==null){r.i(new A.j(q,q,"expected-closing-tag-but-got-eof")) +r.i(new A.D(q,"")r.b7() +else if(p==null){r.i(new A.j(q,q,"eof-in-tag-name")) +r.x=t.c.a(r.gE())}else if(p==="/")r.x=t.c.a(r.gbm()) +else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +s=t.fn.a(r.w) +s.b=A.k(s.b)+"\ufffd"}else{s=t.fn.a(r.w) +s.b=A.k(s.b)+p}return!0}, +o3(){var s=this,r=s.a,q=r.D() +if(q==="/"){s.y.a="" +s.x=t.c.a(s.go0())}else{s.i(new A.D(null,"<")) +r.X(q) +s.x=t.c.a(s.gcu())}return!0}, +o1(){var s=this,r=s.a,q=r.D() +if(A.b4(q)){s.y.a+=A.k(q) +s.x=t.c.a(s.gnZ())}else{s.i(new A.D(null,""&&q){r.w=new A.H(r.y.j(0),!1) +r.b7() +r.x=t.c.a(r.gE())}else{s=r.y +if(A.b4(o))s.a+=A.k(o) +else{s=s.j(0) +r.i(new A.D(null,""&&q){r.w=new A.H(r.y.j(0),!1) +r.b7() +r.x=t.c.a(r.gE())}else{s=r.y +if(A.b4(o))s.a+=A.k(o) +else{s=s.j(0) +r.i(new A.D(null,""&&q){r.w=new A.H(r.y.j(0),!1) +r.b7() +r.x=t.c.a(r.gE())}else{s=r.y +if(A.b4(o))s.a+=A.k(o) +else{s=s.j(0) +r.i(new A.D(null,""){s.i(new A.D(r,">")) +s.x=t.c.a(s.gbC())}else if(q==="\x00"){s.i(new A.j(r,r,"invalid-codepoint")) +s.i(new A.D(r,"\ufffd")) +s.x=t.c.a(s.gbf())}else if(q==null)s.x=t.c.a(s.gE()) +else{s.i(new A.D(r,q)) +s.x=t.c.a(s.gbf())}return!0}, +jf(){var s,r=this,q=r.a,p=q.D() +if(p==="/"){r.y.a="" +r.x=t.c.a(r.gjd())}else if(A.b4(p)){q=A.k(p) +r.i(new A.D(null,"<"+q)) +s=r.y +s.a="" +s.a=q +r.x=t.c.a(r.giT())}else{r.i(new A.D(null,"<")) +q.X(p) +r.x=t.c.a(r.gbf())}return!0}, +je(){var s=this,r=s.a,q=r.D() +if(A.b4(q)){r=s.y +r.a="" +r.a=A.k(q) +s.x=t.c.a(s.gjb())}else{s.i(new A.D(null,""&&q){r.w=new A.H(r.y.j(0),!1) +r.b7() +r.x=t.c.a(r.gE())}else{s=r.y +if(A.b4(o))s.a+=A.k(o) +else{s=s.j(0) +r.i(new A.D(null,""){s.i(new A.D(q==null?new A.Y(""):null,q)) +r=t.c +if(s.y.j(0).toLowerCase()==="script")s.x=r.a(s.gbB()) +else s.x=r.a(s.gbf())}else if(A.b4(q)){s.i(new A.D(q==null?new A.Y(""):null,q)) +s.y.a+=A.k(q)}else{r.X(q) +s.x=t.c.a(s.gbf())}return!0}, +j_(){var s=this,r=null,q=s.a.D() +if(q==="-"){s.i(new A.D(r,"-")) +s.x=t.c.a(s.giX())}else if(q==="<"){s.i(new A.D(r,"<")) +s.x=t.c.a(s.ge3())}else if(q==="\x00"){s.i(new A.j(r,r,"invalid-codepoint")) +s.i(new A.D(r,"\ufffd"))}else if(q==null){s.i(new A.j(r,r,"eof-in-script-in-script")) +s.x=t.c.a(s.gE())}else s.i(new A.D(r,q)) +return!0}, +iY(){var s=this,r=null,q=s.a.D() +if(q==="-"){s.i(new A.D(r,"-")) +s.x=t.c.a(s.giV())}else if(q==="<"){s.i(new A.D(r,"<")) +s.x=t.c.a(s.ge3())}else if(q==="\x00"){s.i(new A.j(r,r,"invalid-codepoint")) +s.i(new A.D(r,"\ufffd")) +s.x=t.c.a(s.gbB())}else if(q==null){s.i(new A.j(r,r,"eof-in-script-in-script")) +s.x=t.c.a(s.gE())}else{s.i(new A.D(r,q)) +s.x=t.c.a(s.gbB())}return!0}, +iW(){var s=this,r=null,q=s.a.D() +if(q==="-")s.i(new A.D(r,"-")) +else if(q==="<"){s.i(new A.D(r,"<")) +s.x=t.c.a(s.ge3())}else if(q===">"){s.i(new A.D(r,">")) +s.x=t.c.a(s.gbC())}else if(q==="\x00"){s.i(new A.j(r,r,"invalid-codepoint")) +s.i(new A.D(r,"\ufffd")) +s.x=t.c.a(s.gbB())}else if(q==null){s.i(new A.j(r,r,"eof-in-script-in-script")) +s.x=t.c.a(s.gE())}else{s.i(new A.D(r,q)) +s.x=t.c.a(s.gbB())}return!0}, +iZ(){var s=this,r=s.a,q=r.D() +if(q==="/"){s.i(new A.D(null,"/")) +s.y.a="" +s.x=t.c.a(s.giR())}else{r.X(q) +s.x=t.c.a(s.gbB())}return!0}, +iS(){var s=this,r=s.a,q=r.D() +if(A.a8(q)||q==="/"||q===">"){s.i(new A.D(q==null?new A.Y(""):null,q)) +r=t.c +if(s.y.j(0).toLowerCase()==="script")s.x=r.a(s.gbf()) +else s.x=r.a(s.gbB())}else if(A.b4(q)){s.i(new A.D(q==null?new A.Y(""):null,q)) +s.y.a+=A.k(q)}else{r.X(q) +s.x=t.c.a(s.gbB())}return!0}, +lH(){var s=this,r=null,q=s.a,p=q.D() +if(A.a8(p))q.cL(!0) +else{q=p==null +if(!q&&A.b4(p)){s.bF(p) +s.x=t.c.a(s.gbI())}else if(p===">")s.b7() +else if(p==="/")s.x=t.c.a(s.gbm()) +else if(q){s.i(new A.j(r,r,"expected-attribute-name-but-got-eof")) +s.x=t.c.a(s.gE())}else if(B.b.C("'\"=<",p)){s.i(new A.j(r,r,"invalid-character-in-attribute-name")) +s.bF(p) +s.x=t.c.a(s.gbI())}else if(p==="\x00"){s.i(new A.j(r,r,"invalid-codepoint")) +s.bF("\ufffd") +s.x=t.c.a(s.gbI())}else{s.bF(p) +s.x=t.c.a(s.gbI())}}return!0}, +lt(){var s,r,q=this,p=null,o=q.a,n=o.D(),m=!0,l=!1 +if(n==="=")q.x=t.c.a(q.ghP()) +else if(A.b4(n)){s=q.ax +s.a+=A.k(n) +o=o.m_(!0) +s.a+=o +m=!1}else{l=n===">" +if(!l)if(A.a8(n))q.x=t.c.a(q.gld()) +else if(n==="/")q.x=t.c.a(q.gbm()) +else if(n==="\x00"){q.i(new A.j(p,p,"invalid-codepoint")) +q.ax.a+="\ufffd" +m=!1}else{m=n==null +if(m){q.i(new A.j(p,p,"eof-in-attribute-name")) +q.x=t.c.a(q.gE())}else if(B.b.C("'\"<",n)){q.i(new A.j(p,p,"invalid-character-in-attribute-name")) +q.ax.a+=n}else q.ax.a+=n}}if(m){q.dl(-1) +o=q.ax.a +r=A.c9(o.charCodeAt(0)==0?o:o) +o=q.Q +o.toString +B.a.gA(o).a=r +o=q.as +if((o==null?q.as=A.j3(t.N):o).C(0,r))q.i(new A.j(p,p,"duplicate-attribute")) +q.as.l(0,r) +if(l)q.b7()}return!0}, +le(){var s=this,r=null,q=s.a,p=q.D() +if(A.a8(p))q.cL(!0) +else if(p==="=")s.x=t.c.a(s.ghP()) +else if(p===">")s.b7() +else{q=p==null +if(!q&&A.b4(p)){s.bF(p) +s.x=t.c.a(s.gbI())}else if(p==="/")s.x=t.c.a(s.gbm()) +else if(p==="\x00"){s.i(new A.j(r,r,"invalid-codepoint")) +s.bF("\ufffd") +s.x=t.c.a(s.gbI())}else if(q){s.i(new A.j(r,r,"expected-end-of-tag-but-got-eof")) +s.x=t.c.a(s.gE())}else if(B.b.C("'\"<",p)){s.i(new A.j(r,r,"invalid-character-after-attribute-name")) +s.bF(p) +s.x=t.c.a(s.gbI())}else{s.bF(p) +s.x=t.c.a(s.gbI())}}return!0}, +lI(){var s=this,r=null,q=s.a,p=q.D() +if(A.a8(p))q.cL(!0) +else if(p==='"'){s.ck(0) +s.x=t.c.a(s.glx())}else if(p==="&"){s.x=t.c.a(s.gdE()) +q.X(p) +s.ck(0)}else if(p==="'"){s.ck(0) +s.x=t.c.a(s.glD())}else if(p===">"){s.i(new A.j(r,r,u.F)) +s.b7()}else if(p==="\x00"){s.i(new A.j(r,r,"invalid-codepoint")) +s.ck(-1) +s.ay.a+="\ufffd" +s.x=t.c.a(s.gdE())}else if(p==null){s.i(new A.j(r,r,"expected-attribute-value-but-got-eof")) +s.x=t.c.a(s.gE())}else if(B.b.C("=<`",p)){s.i(new A.j(r,r,"equals-in-unquoted-attribute-value")) +s.ck(-1) +s.ay.a+=p +s.x=t.c.a(s.gdE())}else{s.ck(-1) +s.ay.a+=p +s.x=t.c.a(s.gdE())}return!0}, +ly(){var s,r=this,q=null,p=r.a,o=p.D() +if(o==='"'){r.c1(-1) +r.dl(0) +r.x=t.c.a(r.ghJ())}else if(o==="&")r.dF('"',!0) +else if(o==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +r.ay.a+="\ufffd"}else if(o==null){r.i(new A.j(q,q,"eof-in-attribute-value-double-quote")) +r.c1(-1) +r.x=t.c.a(r.gE())}else{s=r.ay +s.a+=o +p=p.co(34,38) +s.a+=p}return!0}, +lE(){var s,r=this,q=null,p=r.a,o=p.D() +if(o==="'"){r.c1(-1) +r.dl(0) +r.x=t.c.a(r.ghJ())}else if(o==="&")r.dF("'",!0) +else if(o==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +r.ay.a+="\ufffd"}else if(o==null){r.i(new A.j(q,q,"eof-in-attribute-value-single-quote")) +r.c1(-1) +r.x=t.c.a(r.gE())}else{s=r.ay +s.a+=o +p=p.co(39,38) +s.a+=p}return!0}, +lF(){var s,r=this,q=null,p=r.a,o=p.D() +if(A.a8(o)){r.c1(-1) +r.x=t.c.a(r.gbs())}else if(o==="&")r.dF(">",!0) +else if(o===">"){r.c1(-1) +r.b7()}else if(o==null){r.i(new A.j(q,q,"eof-in-attribute-value-no-quotes")) +r.c1(-1) +r.x=t.c.a(r.gE())}else if(B.b.C("\"'=<`",o)){r.i(new A.j(q,q,u.V)) +r.ay.a+=o}else if(o==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +r.ay.a+="\ufffd"}else{s=r.ay +s.a+=o +p=p.lZ(B.Ml) +s.a+=p}return!0}, +lf(){var s=this,r=null,q=s.a,p=q.D() +if(A.a8(p))s.x=t.c.a(s.gbs()) +else if(p===">")s.b7() +else if(p==="/")s.x=t.c.a(s.gbm()) +else if(p==null){s.i(new A.j(r,r,"unexpected-EOF-after-attribute-value")) +q.X(p) +s.x=t.c.a(s.gE())}else{s.i(new A.j(r,r,u.H)) +q.X(p) +s.x=t.c.a(s.gbs())}return!0}, +jk(){var s=this,r=null,q=s.a,p=q.D() +if(p===">"){t.fn.a(s.w).c=!0 +s.b7()}else if(p==null){s.i(new A.j(r,r,"unexpected-EOF-after-solidus-in-tag")) +q.X(p) +s.x=t.c.a(s.gE())}else{s.i(new A.j(r,r,u.B)) +q.X(p) +s.x=t.c.a(s.gbs())}return!0}, +lP(){var s=this,r=s.a,q=r.hT(62) +q=A.cO(q,"\x00","\ufffd") +s.i(new A.dU(null,q)) +r.D() +s.x=t.c.a(s.gE()) +return!0}, +np(){var s,r,q,p,o,n,m=this,l=m.a,k=A.i([l.D()],t.mf) +if(B.a.gA(k)==="-"){B.a.l(k,l.D()) +if(B.a.gA(k)==="-"){m.w=new A.dU(new A.Y(""),null) +m.x=t.c.a(m.gmb()) +return!0}}else if(B.a.gA(k)==="d"||B.a.gA(k)==="D"){r=0 +for(;;){if(!(r<6)){s=!0 +break}q=B.j1[r] +p=l.D() +B.a.l(k,p) +if(p==null||!B.b.C(q,p)){s=!1 +break}++r}if(s){m.w=new A.eS(!0) +m.x=t.c.a(m.gmM()) +return!0}}else{o=!1 +if(B.a.gA(k)==="["){n=m.f +if(n!=null){o=n.d.c +o=o.length!==0&&B.a.gA(o).w!=m.f.d.a}}if(o){r=0 +for(;;){if(!(r<6)){s=!0 +break}q=B.j0[r] +B.a.l(k,l.D()) +if(B.a.gA(k)!==q){s=!1 +break}++r}if(s){m.x=t.c.a(m.glT()) +return!0}}}m.i(new A.j(null,null,"expected-dashes-or-doctype")) +while(o=k.length,o!==0){if(0>=o)return A.c(k,-1) +o=k.pop() +if(o!=null)l.y=l.y-o.length}m.x=t.c.a(m.geB()) +return!0}, +mc(){var s,r=this,q=null,p=r.a.D() +if(p==="-")r.x=t.c.a(r.gm9()) +else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +t.v.a(r.w).b.a+="\ufffd"}else if(p===">"){r.i(new A.j(q,q,"incorrect-comment")) +s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else if(p==null){r.i(new A.j(q,q,"eof-in-comment")) +s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else{t.v.a(r.w).b.a+=p +r.x=t.c.a(r.gbJ())}return!0}, +ma(){var s,r=this,q=null,p=r.a.D() +if(p==="-")r.x=t.c.a(r.ghZ()) +else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +t.v.a(r.w).b.a+="-\ufffd"}else if(p===">"){r.i(new A.j(q,q,"incorrect-comment")) +s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else if(p==null){r.i(new A.j(q,q,"eof-in-comment")) +s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else{s=t.v.a(r.w).b +s.a=(s.a+="-")+p +r.x=t.c.a(r.gbJ())}return!0}, +md(){var s,r=this,q=null,p=r.a,o=p.D() +if(o==="-")r.x=t.c.a(r.ghY()) +else if(o==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +t.v.a(r.w).b.a+="\ufffd"}else if(o==null){r.i(new A.j(q,q,"eof-in-comment")) +p=r.w +p.toString +r.i(p) +r.x=t.c.a(r.gE())}else{s=t.v.a(r.w) +s.b.a+=o +p=p.co(45,0) +s=s.b +s.a+=p}return!0}, +m7(){var s,r=this,q=null,p=r.a.D() +if(p==="-")r.x=t.c.a(r.ghZ()) +else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +t.v.a(r.w).b.a+="-\ufffd" +r.x=t.c.a(r.gbJ())}else if(p==null){r.i(new A.j(q,q,"eof-in-comment-end-dash")) +s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else{s=t.v.a(r.w).b +s.a=(s.a+="-")+p +r.x=t.c.a(r.gbJ())}return!0}, +m8(){var s,r=this,q=null,p=r.a.D() +if(p===">"){s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +t.v.a(r.w).b.a+="--\ufffd" +r.x=t.c.a(r.gbJ())}else if(p==="!"){r.i(new A.j(q,q,u.x)) +r.x=t.c.a(r.gm5())}else if(p==="-"){r.i(new A.j(q,q,u.K)) +s=t.v.a(r.w) +p.toString +s.b.a+=p}else if(p==null){r.i(new A.j(q,q,"eof-in-comment-double-dash")) +s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else{r.i(new A.j(q,q,"unexpected-char-in-comment")) +s=t.v.a(r.w).b +s.a=(s.a+="--")+p +r.x=t.c.a(r.gbJ())}return!0}, +m6(){var s,r=this,q=null,p=r.a.D() +if(p===">"){s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else if(p==="-"){t.v.a(r.w).b.a+="--!" +r.x=t.c.a(r.ghY())}else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +t.v.a(r.w).b.a+="--!\ufffd" +r.x=t.c.a(r.gbJ())}else if(p==null){r.i(new A.j(q,q,"eof-in-comment-end-bang-state")) +s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else{s=t.v.a(r.w).b +s.a=(s.a+="--!")+p +r.x=t.c.a(r.gbJ())}return!0}, +mN(){var s=this,r=null,q=s.a,p=q.D() +if(A.a8(p))s.x=t.c.a(s.ghQ()) +else if(p==null){s.i(new A.j(r,r,"expected-doctype-name-but-got-eof")) +q=t.W.a(s.w) +q.e=!1 +s.i(q) +s.x=t.c.a(s.gE())}else{s.i(new A.j(r,r,"need-space-after-doctype")) +q.X(p) +s.x=t.c.a(s.ghQ())}return!0}, +lJ(){var s,r=this,q=null,p=r.a.D() +if(A.a8(p))return!0 +else if(p===">"){r.i(new A.j(q,q,u.f)) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +t.W.a(r.w).d="\ufffd" +r.x=t.c.a(r.geL())}else if(p==null){r.i(new A.j(q,q,"expected-doctype-name-but-got-eof")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{t.W.a(r.w).d=p +r.x=t.c.a(r.geL())}return!0}, +mD(){var s,r,q=this,p=null,o=q.a.D() +if(A.a8(o)){s=t.W.a(q.w) +r=s.d +s.d=r==null?p:A.c9(r) +q.x=t.c.a(q.glg())}else if(o===">"){s=t.W.a(q.w) +r=s.d +s.d=r==null?p:A.c9(r) +s=q.w +s.toString +q.i(s) +q.x=t.c.a(q.gE())}else if(o==="\x00"){q.i(new A.j(p,p,"invalid-codepoint")) +s=t.W.a(q.w) +s.d=A.k(s.d)+"\ufffd" +q.x=t.c.a(q.geL())}else if(o==null){q.i(new A.j(p,p,"eof-in-doctype-name")) +s=t.W.a(q.w) +s.e=!1 +r=s.d +s.d=r==null?p:A.c9(r) +s=q.w +s.toString +q.i(s) +q.x=t.c.a(q.gE())}else{s=t.W.a(q.w) +s.d=A.k(s.d)+o}return!0}, +lh(){var s,r,q,p=this,o=p.a,n=o.D() +if(A.a8(n))return!0 +else if(n===">"){o=p.w +o.toString +p.i(o) +p.x=t.c.a(p.gE())}else if(n==null){t.W.a(p.w).e=!1 +o.X(n) +p.i(new A.j(null,null,"eof-in-doctype")) +o=p.w +o.toString +p.i(o) +p.x=t.c.a(p.gE())}else{if(n==="p"||n==="P"){r=0 +for(;;){if(!(r<5)){s=!0 +break}q=B.ji[r] +n=o.D() +if(n==null||!B.b.C(q,n)){s=!1 +break}++r}if(s){p.x=t.c.a(p.glj()) +return!0}}else if(n==="s"||n==="S"){r=0 +for(;;){if(!(r<5)){s=!0 +break}q=B.iZ[r] +n=o.D() +if(n==null||!B.b.C(q,n)){s=!1 +break}++r}if(s){p.x=t.c.a(p.glm()) +return!0}}o.X(n) +o=A.v(["data",n],t.N,t.X) +p.i(new A.j(o,null,u.p)) +t.W.a(p.w).e=!1 +p.x=t.c.a(p.gcn())}return!0}, +lk(){var s=this,r=null,q=s.a,p=q.D() +if(A.a8(p))s.x=t.c.a(s.gez()) +else if(p==="'"||p==='"'){s.i(new A.j(r,r,"unexpected-char-in-doctype")) +q.X(p) +s.x=t.c.a(s.gez())}else if(p==null){s.i(new A.j(r,r,"eof-in-doctype")) +q=t.W.a(s.w) +q.e=!1 +s.i(q) +s.x=t.c.a(s.gE())}else{q.X(p) +s.x=t.c.a(s.gez())}return!0}, +lK(){var s,r=this,q=null,p=r.a.D() +if(A.a8(p))return!0 +else if(p==='"'){t.W.a(r.w).b="" +r.x=t.c.a(r.gmG())}else if(p==="'"){t.W.a(r.w).b="" +r.x=t.c.a(r.gmI())}else if(p===">"){r.i(new A.j(q,q,"unexpected-end-of-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else if(p==null){r.i(new A.j(q,q,"eof-in-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{r.i(new A.j(q,q,"unexpected-char-in-doctype")) +t.W.a(r.w).e=!1 +r.x=t.c.a(r.gcn())}return!0}, +mH(){var s,r=this,q=null,p=r.a.D() +if(p==='"')r.x=t.c.a(r.ghK()) +else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +s=t.W.a(r.w) +s.b=A.k(s.b)+"\ufffd"}else if(p===">"){r.i(new A.j(q,q,"unexpected-end-of-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else if(p==null){r.i(new A.j(q,q,"eof-in-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{s=t.W.a(r.w) +s.b=A.k(s.b)+p}return!0}, +mJ(){var s,r=this,q=null,p=r.a.D() +if(p==="'")r.x=t.c.a(r.ghK()) +else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +s=t.W.a(r.w) +s.b=A.k(s.b)+"\ufffd"}else if(p===">"){r.i(new A.j(q,q,"unexpected-end-of-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else if(p==null){r.i(new A.j(q,q,"eof-in-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{s=t.W.a(r.w) +s.b=A.k(s.b)+p}return!0}, +li(){var s,r=this,q=null,p="unexpected-char-in-doctype",o=r.a.D() +if(A.a8(o))r.x=t.c.a(r.glM()) +else if(o===">"){s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else if(o==='"'){r.i(new A.j(q,q,p)) +t.W.a(r.w).c="" +r.x=t.c.a(r.geM())}else if(o==="'"){r.i(new A.j(q,q,p)) +t.W.a(r.w).c="" +r.x=t.c.a(r.geN())}else if(o==null){r.i(new A.j(q,q,"eof-in-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{r.i(new A.j(q,q,p)) +t.W.a(r.w).e=!1 +r.x=t.c.a(r.gcn())}return!0}, +lN(){var s,r=this,q=null,p=r.a.D() +if(A.a8(p))return!0 +else if(p===">"){s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else if(p==='"'){t.W.a(r.w).c="" +r.x=t.c.a(r.geM())}else if(p==="'"){t.W.a(r.w).c="" +r.x=t.c.a(r.geN())}else if(p==null){r.i(new A.j(q,q,"eof-in-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{r.i(new A.j(q,q,"unexpected-char-in-doctype")) +t.W.a(r.w).e=!1 +r.x=t.c.a(r.gcn())}return!0}, +ln(){var s=this,r=null,q=s.a,p=q.D() +if(A.a8(p))s.x=t.c.a(s.geA()) +else if(p==="'"||p==='"'){s.i(new A.j(r,r,"unexpected-char-in-doctype")) +q.X(p) +s.x=t.c.a(s.geA())}else if(p==null){s.i(new A.j(r,r,"eof-in-doctype")) +q=t.W.a(s.w) +q.e=!1 +s.i(q) +s.x=t.c.a(s.gE())}else{q.X(p) +s.x=t.c.a(s.geA())}return!0}, +lL(){var s,r=this,q=null,p="unexpected-char-in-doctype",o=r.a.D() +if(A.a8(o))return!0 +else if(o==='"'){t.W.a(r.w).c="" +r.x=t.c.a(r.geM())}else if(o==="'"){t.W.a(r.w).c="" +r.x=t.c.a(r.geN())}else if(o===">"){r.i(new A.j(q,q,p)) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else if(o==null){r.i(new A.j(q,q,"eof-in-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{r.i(new A.j(q,q,p)) +t.W.a(r.w).e=!1 +r.x=t.c.a(r.gcn())}return!0}, +mO(){var s,r=this,q=null,p=r.a.D() +if(p==='"')r.x=t.c.a(r.ghL()) +else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +s=t.W.a(r.w) +s.c=A.k(s.c)+"\ufffd"}else if(p===">"){r.i(new A.j(q,q,"unexpected-end-of-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else if(p==null){r.i(new A.j(q,q,"eof-in-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{s=t.W.a(r.w) +s.c=A.k(s.c)+p}return!0}, +mP(){var s,r=this,q=null,p=r.a.D() +if(p==="'")r.x=t.c.a(r.ghL()) +else if(p==="\x00"){r.i(new A.j(q,q,"invalid-codepoint")) +s=t.W.a(r.w) +s.c=A.k(s.c)+"\ufffd"}else if(p===">"){r.i(new A.j(q,q,"unexpected-end-of-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else if(p==null){r.i(new A.j(q,q,"eof-in-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{s=t.W.a(r.w) +s.c=A.k(s.c)+p}return!0}, +ll(){var s,r=this,q=null,p=r.a.D() +if(A.a8(p))return!0 +else if(p===">"){s=r.w +s.toString +r.i(s) +r.x=t.c.a(r.gE())}else if(p==null){r.i(new A.j(q,q,"eof-in-doctype")) +s=t.W.a(r.w) +s.e=!1 +r.i(s) +r.x=t.c.a(r.gE())}else{r.i(new A.j(q,q,"unexpected-char-in-doctype")) +r.x=t.c.a(r.gcn())}return!0}, +lQ(){var s=this,r=s.a,q=r.D() +if(q===">"){r=s.w +r.toString +s.i(r) +s.x=t.c.a(s.gE())}else if(q==null){r.X(q) +r=s.w +r.toString +s.i(r) +s.x=t.c.a(s.gE())}return!0}, +lU(){var s,r,q,p=this,o=A.i([],t.s) +for(s=p.a,r=0;;){q=s.D() +if(q==null)break +if(q==="\x00"){p.i(new A.j(null,null,"invalid-codepoint")) +q="\ufffd"}B.a.l(o,q) +if(q==="]"&&r<2)++r +else{if(q===">"&&r===2){if(0>=o.length)return A.c(o,-1) +o.pop() +if(0>=o.length)return A.c(o,-1) +o.pop() +if(0>=o.length)return A.c(o,-1) +o.pop() +break}r=0}}if(o.length!==0){s=B.a.aQ(o) +p.i(new A.D(null,s))}p.x=t.c.a(p.gE()) +return!0}, +$iL:1, +jD(){return this.gjC().$0()}} +A.mC.prototype={ +$0(){var s=this.a.b +s===$&&A.o() +return s}, +$S:8} +A.hH.prototype={ +l(a,b){var s,r,q,p,o,n,m,l,k,j=this,i="http://www.w3.org/1999/xhtml" +t.mV.a(b) +if(b!=null)for(s=A.x(j).h("X"),r=new A.X(j,s),r=new A.M(r,r.gn(0),s.h("M")),q=b.x,p=b.w,s=s.h("G.E"),o=0;r.p();){n=r.d +if(n==null)n=s.a(n) +if(n==null)break +m=n.w +if(m==null)m=i +l=n.x +k=p==null?i:p +if(new A.l(m,l).$s===new A.l(k,q).$s&&m===k&&l==q&&A.yo(n.b,b.b))++o +if(o===3){B.a.W(j.a,n) +break}}j.bW(0,b)}} +A.nP.prototype={ +aL(){var s=this +B.a.bc(s.c) +s.d.sn(0,0) +s.f=s.e=null +s.r=!1 +s.b=A.ro()}, +a0(a,b){var s,r,q,p,o,n,m,l,k,j="We should never reach this point",i="http://www.w3.org/1999/xhtml",h=a instanceof A.am,g=!1 +if(b!=null)switch(b){case"button":s=B.cE +r=B.Mj +break +case"list":s=B.cE +r=B.Mo +break +case"table":s=B.Ms +r=B.cD +break +case"select":s=B.Mq +r=B.cD +g=!0 +break +default:throw A.f(A.ce(j))}else{s=B.cE +r=B.cD}for(q=this.c,p=A.w(q).h("X<1>"),q=new A.X(q,p),q=new A.M(q,q.gn(0),p.h("M")),o=!h,p=p.h("G.E");q.p();){n=q.d +if(n==null)n=p.a(n) +if(o){m=n.x +m=m==null?a==null:m===a}else m=!1 +if(!m)m=h&&n===a +else m=!0 +if(m)return!0 +else{l=n.w +m=l==null +k=m?i:l +n=n.x +if(!s.C(0,new A.l(k,n)))n=r.C(0,new A.l(m?i:l,n)) +else n=!0 +if(g!==n)return!1}}throw A.f(A.ce(j))}, +b6(a){return this.a0(a,null)}, +aE(){var s,r,q,p,o,n,m,l,k,j,i,h=this,g=h.d +if(g.gn(0)===0)return +s=g.a +r=s.length +q=r-1 +if(!(q>=0))return A.c(s,q) +p=s[q] +if(p==null||B.a.C(h.c,p))return +r=h.c +for(;;){if(!(p!=null&&!B.a.C(r,p)))break +if(q===0){q=-1 +break}--q +if(!(q>=0&&q=0&&q"),s=new A.X(s,r),s=new A.M(s,s.gn(0),r.h("M")),r=r.h("G.E");s.p();){q=s.d +if(q==null)q=r.a(q) +if(q==null)break +else if(q.x==a)return q}return null}, +cr(a,b){var s=b.gL(),r=A.rm(a.gaC()) +r.e=a.a +s.l(0,r)}, +i1(a){var s,r=a.b,q=a.w +if(q==null)q=this.a +this.b===$&&A.o() +s=A.q1(r,q===""?null:q) +s.saZ(a.e) +s.e=a.a +return s}, +O(a){if(this.r)return this.nc(a) +return this.ib(a)}, +ib(a){var s,r,q=a.b,p=a.w +if(p==null)p=this.a +this.b===$&&A.o() +s=A.q1(q,p===""?null:p) +s.saZ(a.e) +s.e=a.a +r=this.c +B.a.gA(r).gL().l(0,s) +B.a.l(r,s) +return s}, +nc(a){var s,r,q=this,p=q.i1(a),o=q.c +if(!B.hQ.C(0,B.a.gA(o).x))return q.ib(a) +else{s=q.e2() +r=s[1] +if(r==null)s[0].gL().l(0,p) +else s[0].nb(p,r) +B.a.l(o,p)}return p}, +bN(a,b){var s,r=this.c,q=B.a.gA(r) +if(this.r)r=!B.hQ.C(0,B.a.gA(r).x) +else r=!0 +if(r)A.t2(q,a,b,null) +else{s=this.e2() +r=s[0] +r.toString +A.t2(r,a,b,t.mV.a(s[1]))}}, +e2(){var s,r,q,p,o=this.c,n=A.w(o).h("X<1>"),m=new A.X(o,n) +m=new A.M(m,m.gn(0),n.h("M")) +n=n.h("G.E") +for(;;){if(!m.p()){s=null +break}r=m.d +s=r==null?n.a(r):r +if(s.x==="table")break}q=null +if(s!=null){p=s.a +if(p!=null)q=s +else{n=B.a.al(o,s)-1 +if(!(n>=0&&n=o.length)return A.c(o,0) +p=o[0]}return A.i([p,q],t.hg)}, +bS(a){var s=this.c,r=B.a.gA(s).x +if(r!=a&&B.a.C(B.bH,r)){if(0>=s.length)return A.c(s,-1) +s.pop() +this.bS(a)}}, +cc(){return this.bS(null)}} +A.pB.prototype={ +$2(a,b){var s,r,q,p,o,n,m,l,k,j=new A.Y(""),i="%("+A.q(a)+")" +for(s=this.a,r=i.length,q=J.ci(b),p=0,o="";n=s.a,m=B.b.ap(n,i,p),m>=0;){j.a=o+B.b.t(n,p,m) +m+=r +l=m +for(;;){o=s.a +if(!(lm){k=A.lA(B.b.t(s.a,m,l),null) +m=l}else k=0 +o=s.a +if(!(m")).gn(0) +q=n}else q=1 +s=r?-1:1 +this.a.k(0,k,q+s) +return""+q+". "}, +$S:44} +A.po.prototype={ +$1(a){return t.Q.a(a).x==="li"}, +$S:45} +A.pj.prototype={ +$0(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6=this.b +if(a6.length===0)return +s=B.a.cQ(a6,0,new A.pk(),t.S) +if(B.a.aH(a6,new A.pl())){r=A.w(a6) +q=new A.Q(a6,r.h("e(1)").a(new A.pm()),r.h("Q<1,e>")).aQ(0) +p=A.i([0],t.Z) +r=(q.length===0?B.hT:new A.d3(q)).a +o=new A.fR(r,0,0) +n=0 +while(o.fR(1,o.c)){m=o.d +n+=(m==null?o.d=B.b.t(r,o.b,o.c):m).length +B.a.l(p,n)}for(r=this.c,o=this.a,l=t.N,k=t.X,j=t.ke,i=0,h=0;i2048)g=i+f+1 +e=p.length +for(;;){d=h+1 +if(d=0))return A.c(p,d) +c=p[d]<=g}else c=!1 +if(!c)break +h=d}if(!(h>=0&&h=0&&da3){a5=A.ae(l,k) +a5.a1(0,a1) +a5.k(0,"text",B.b.t(a2,a3,a4)) +B.a.l(b,a5)}a+=c +if(a>=g)break}B.a.l(r,A.v(["kind",o.b,"offset",o.a+i,"length",g-i,"runs",b,"paragraphEnd",g===s],l,k))}o.a=o.a+(s+1)}B.a.bc(a6)}, +$S:1} +A.pk.prototype={ +$2(a,b){return A.ax(a)+A.q(t.f.a(b).m(0,"text")).length}, +$S:19} +A.pl.prototype={ +$1(a){return B.b.ba(A.q(t.f.a(a).m(0,"text"))).length!==0}, +$S:47} +A.pm.prototype={ +$1(a){return A.q(t.f.a(a).m(0,"text"))}, +$S:48} +A.pp.prototype={ +$2(a,b){var s,r +t.f.a(b) +s=this.a +if(!s.c){r=A.a5("\\s+",!0) +a=A.cO(a,r," ")}r=this.b +if(r.length===0&&!s.c)a=B.b.og(a) +if(a.length!==0){s=A.az(t.N,t.X) +s.k(0,"text",a) +s.a1(0,b) +B.a.l(r,s)}}, +$S:49} +A.pq.prototype={ +$2(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g,f=this +t.f.a(b) +if(a instanceof A.bY){s=J.ay(a.w) +a.w=s +f.b.$2(s,b) +return}if(!(a instanceof A.K))return +r=a.x +if(r==null)r="" +q=B.Mk.C(0,r) +s=f.a +p=s.b +o=s.c +if(q){f.c.$0() +s.b=r +s.c=r==="pre"}n=a.geW().length===0?a.b.m(0,"name"):a.geW() +if(n!=null&&n.length!==0)f.d.k(0,n,s.a+B.a.cQ(f.e,0,new A.pr(),t.S)) +m=t.N +l=t.X +k=A.w1(b,m,l) +if(B.Mr.C(0,r))k.k(0,"bold",!0) +if(B.Mp.C(0,r))k.k(0,"italic",!0) +if(r==="u"||r==="a")k.k(0,"underline",!0) +if(r==="s"||r==="del")k.k(0,"strike",!0) +if(r==="code"||r==="pre")k.k(0,"code",!0) +if(r==="br"){j=A.az(m,l) +j.k(0,"text","\n") +j.a1(0,k) +B.a.l(f.e,j)}if(r==="li")f.b.$2(f.f.$1(a),k) +if(r==="td"||r==="th")if(f.e.length!==0)f.b.$2(" | ",k) +if(r==="img"){f.c.$0() +i=a.b.m(0,"src") +if(i!=null){k=a.b.m(0,"width") +h=A.qf(k==null?"":k) +k=a.b.m(0,"height") +g=A.qf(k==null?"":k) +k=s.a +j=a.b.m(0,"alt") +if(j==null)j="Illustration" +B.a.l(f.r,A.v(["kind","image","offset",k,"length",1,"src",i,"alt",j,"aspect",h!=null&&g!=null&&h>0&&g>0?h/g:1.5],m,l)) +s.a+=2}}else for(m=a.gL().a,l=A.w(m),m=new J.J(m,m.length,l.h("J<1>")),l=l.c;m.p();){j=m.d +f.$2(j==null?l.a(j):j,k)}if(q){f.c.$0() +s.b=p +s.c=o}}, +$S:50} +A.pr.prototype={ +$2(a,b){return A.ax(a)+A.q(t.f.a(b).m(0,"text")).length}, +$S:19} +A.lV.prototype={ +eJ(a,b){var s=0,r=A.br(t.f),q,p=this +var $async$eJ=A.bs(function(c,d){if(c===1)return A.bo(d,r) +for(;;)switch(s){case 0:if(a==="open"){q=p.dn(t.ev.a(b)) +s=1 +break}if(a==="chapter"){q=p.cH(A.ax(b)) +s=1 +break}throw A.f(A.W("Unknown EPUB worker command: "+a,null)) +case 1:return A.bp(q,r)}}) +return A.bq($async$eJ,r)}, +dn(a2){var s=0,r=A.br(t.f),q,p=this,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1 +var $async$dn=A.bs(function(a3,a4){if(a3===1)return A.bo(a4,r) +for(;;)switch(s){case 0:s=3 +return A.c3(A.m9(a2),$async$dn) +case 3:c=a4 +b=c.e +a=b.a +a0=a.b +a1=a0==null?null:B.a.aH(a0.ay,new A.lX()) +if(a1===!0)throw A.f(B.ih) +o=A.vz(c) +a1=c.f +n=a1==null?null:a1.a +if(n==null)n=A.az(t.N,t.am) +a1=A.az(t.jv,t.A) +m=a.c.a +if(m==null)m=A.i([],t.bz) +l=m.length +k=0 +for(;k>") +d=A.a7(new A.Q(o,b.h("d(1)").a(new A.m2(i)),a1),a1.h("G.E"))}else d=new A.lY(i).$1(e) +p.a=c +p.b=i +p.c.bc(0) +q=A.v(["count",i.length,"toc",d],t.N,t.X) +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$dn,r)}, +cH(a){var s=0,r=A.br(t.f),q,p=this,o,n,m,l,k,j,i,h,g,f +var $async$cH=A.bs(function(b,c){if(b===1)return A.bo(c,r) +for(;;)switch(s){case 0:g=p.c +f=g.W(0,a) +if(f!=null){g.k(0,a,f) +q=f +s=1 +break}if(p.a==null||a<0||a>=p.b.length)throw A.f(B.iM) +o=p.b +if(!(a>=0&&a")).cQ(0,0,new A.lW(),t.S) +j=j.h("aV<1>") +for(;;){if(!(g.a>3||i>4194304))break +h=new A.aV(g,j).gF(0) +if(!h.p())A.P(A.bi()) +i-=A.q(g.W(0,h.gB()).m(0,"html")).length}q=o +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$cH,r)}, +ds(a6,a7,a8){var s=0,r=A.br(t.N),q,p=this,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5 +var $async$ds=A.bs(function(a9,b0){if(a9===1)return A.bo(b0,r) +for(;;)switch(s){case 0:a5=A.uE(a6) +for(o=B.hR.gF(B.hR),n=t.il,m=t.kU;o.p();){l=o.gB() +k=A.i([],n) +j=A.i([],m) +i=A.zo(l,j) +if(i==null||j.length!==0)A.P(A.aD("'"+l+"' is not a valid selector: "+A.k(j),null,null)) +new A.d0().f9(a5,i,k) +l=A.i(k.slice(0),n) +h=l.length +g=0 +for(;g") +a0=A.vV(new A.ba(new A.b_(new A.dq(d,a1),a1.h("A(h.E)").a(new A.m7(p,a)),a1.h("b_")),a1.h("bg(h.E)").a(new A.m8()),a1.h("ba")),l)}if(a0==null){d=f.a +if(d!=null)B.a.W(d.gL().a,f) +s=4 +break}s=6 +return A.c3(a0.d1(),$async$ds) +case 6:a2=b0 +a3=a0.d +if(!B.b.U(a3.toLowerCase(),"image/")){d=f.a +if(d!=null)B.a.W(d.gL().a,f) +s=4 +break}d=f.b +m.a(a2) +d.k(0,"src","data:"+a3+";base64,"+B.cJ.geO().bL(a2)) +case 4:o.length===n||(0,A.a2)(o),++g +s=3 +break +case 5:a4=new A.Y("") +a5.cg(a4) +o=a4.a +q=o.charCodeAt(0)==0?o:o +s=1 +break +case 1:return A.bp(q,r)}}) +return A.bq($async$ds,r)}, +kU(a){var s,r,q,p,o,n,m,l,k="style",j=a.b,i=A.x(j).h("aV<1>") +j=A.a7(new A.aV(j,i),i.h("h.E")) +i=j.length +s=0 +for(;s=n.length)return A.c(n,-1) +n.pop() +for(s=b.split("/"),r=s.length,q=0;q=o)return A.c(n,-1) +n.pop()}}else if(p!=="."&&p.length!==0)B.a.l(n,p)}return B.a.aq(n,"/")}} +A.lX.prototype={ +$1(a){var s,r="rendition:layout" +t.az.a(a) +if(a.e===r||a.a===r)s=a.b==="pre-paginated"||a.r.m(0,"content")==="pre-paginated" +else s=!1 +return s}, +$S:51} +A.m4.prototype={ +$1(a){var s,r,q,p=B.a.gbv(a.c.split("#")) +if(this.a.l(0,p))B.a.l(this.b,a) +for(s=a.e,r=s.length,q=0;q>") +p=A.a7(new A.Q(p,o.h("d(1)").a(this),n),n.h("G.E")) +return A.v(["title",a.b,"index",q,"anchor",a.d,"children",p],t.N,t.X)}, +$S:53} +A.m3.prototype={ +$1(a){return t.k5.a(a).c===this.a}, +$S:32} +A.lY.prototype={ +$1(a){var s,r,q,p,o,n,m,l,k,j,i,h,g +t.nw.a(a) +s=A.i([],t.ke) +for(r=a.length,q=t.N,p=t.X,o=this.a,n=0;n")).cq(0,new A.m0(),new A.m1()) +if(k.gdK()){l=k.gcR() +l=A.d9(l,0,l.length,B.E,!1)}else l=null +B.a.l(s,A.v(["title",g,"index",j,"anchor",l,"children",i],q,p))}return s}, +$S:55} +A.lZ.prototype={ +$1(a){return t.k5.a(a).c===this.a}, +$S:32} +A.m_.prototype={ +$1(a){var s=B.b.ba(t.gK.a(a).a) +return s}, +$S:56} +A.m0.prototype={ +$1(a){return A.q(a).length!==0}, +$S:4} +A.m1.prototype={ +$0(){return"Chapter"}, +$S:8} +A.lW.prototype={ +$2(a,b){return A.ax(a)+A.q(t.f.a(b).m(0,"html")).length}, +$S:19} +A.m7.prototype={ +$1(a){return B.b.d4(B.b.d4(t.kY.a(a).a,A.a5("^OEBPS/",!0),""),A.a5("^/",!0),"")===B.b.d4(B.b.d4(this.b,A.a5("^OEBPS/",!0),""),A.a5("^/",!0),"")}, +$S:57} +A.m8.prototype={ +$1(a){return t.kY.a(a).b}, +$S:58} +A.m5.prototype={ +$1(a){return B.b.ba(A.q(a))}, +$S:33} +A.m6.prototype={ +$1(a){var s +A.q(a) +if(a.length!==0){s=A.a5("(?:url\\s*\\(|@import|expression\\s*\\()",!1) +s=!s.b.test(a)}else s=!1 +return s}, +$S:4} +A.f9.prototype={$iaj:1} +A.lO.prototype={ +lb(a){var s,r,q=t.mf +A.uf("absolute",A.i([a,null,null,null,null,null,null,null,null,null,null,null,null,null,null],q)) +s=this.a +s=s.aU(a)>0&&!s.bO(a) +if(s)return a +s=A.uo() +r=A.i([s,a,null,null,null,null,null,null,null,null,null,null,null,null,null,null],q) +A.uf("join",r) +return this.nl(new A.O(r,t.lS))}, +nl(a){var s,r,q,p,o,n,m,l,k,j +t.bq.a(a) +for(s=a.$ti,r=s.h("A(h.E)").a(new A.lP()),q=a.gF(0),s=new A.cF(q,r,s.h("cF")),r=this.a,p=!1,o=!1,n="";s.p();){m=q.gB() +if(r.bO(m)&&o){l=A.jr(m,r) +k=n.charCodeAt(0)==0?n:n +n=B.b.t(k,0,r.cv(k,!0)) +l.b=n +if(r.cW(n))B.a.k(l.e,0,r.gce()) +n=l.j(0)}else if(r.aU(m)>0){o=!r.bO(m) +n=m}else{j=m.length +if(j!==0){if(0>=j)return A.c(m,0) +j=r.eH(m[0])}else j=!1 +if(!j)if(p)n+=r.gce() +n+=m}p=r.cW(m)}return n.charCodeAt(0)==0?n:n}, +d9(a,b){var s=A.jr(b,this.a),r=s.d,q=A.w(r),p=q.h("b_<1>") +r=A.a7(new A.b_(r,q.h("A(1)").a(new A.lQ()),p),p.h("h.E")) +s.snF(r) +r=s.b +if(r!=null)B.a.bx(s.d,0,r) +return s.d}, +dP(a){var s +if(!this.kC(a))return a +s=A.jr(a,this.a) +s.f2() +return s.j(0)}, +kC(a){var s,r,q,p,o,n,m,l=this.a,k=l.aU(a) +if(k!==0){if(l===$.lC())for(s=a.length,r=0;r=0))return A.c(a,r) +n=a.charCodeAt(r) +if(l.by(n)){if(l===$.lC()&&n===47)return!0 +if(p!=null&&l.by(p))return!0 +if(p===46)m=o==null||o===46||l.by(o) +else m=!1 +if(m)return!0}}if(p==null)return!0 +if(l.by(p))return!0 +if(p===46)l=o==null||l.by(o)||o===46 +else l=!1 +if(l)return!0 +return!1}, +o7(a){var s,r,q,p,o,n,m,l=this,k='Unable to find a path to "',j=l.a,i=j.aU(a) +if(i<=0)return l.dP(a) +s=A.uo() +if(j.aU(s)<=0&&j.aU(a)>0)return l.dP(a) +if(j.aU(a)<=0||j.bO(a))a=l.lb(a) +if(j.aU(a)<=0&&j.aU(s)>0)throw A.f(A.rI(k+a+'" from "'+s+'".')) +r=A.jr(s,j) +r.f2() +q=A.jr(a,j) +q.f2() +i=r.d +p=i.length +if(p!==0){if(0>=p)return A.c(i,0) +i=i[0]==="."}else i=!1 +if(i)return q.j(0) +i=r.b +p=q.b +if(i!=p)i=i==null||p==null||!j.f5(i,p) +else i=!1 +if(i)return q.j(0) +for(;;){i=r.d +p=i.length +o=!1 +if(p!==0){n=q.d +m=n.length +if(m!==0){if(0>=p)return A.c(i,0) +i=i[0] +if(0>=m)return A.c(n,0) +n=j.f5(i,n[0]) +i=n}else i=o}else i=o +if(!i)break +B.a.d2(r.d,0) +B.a.d2(r.e,1) +B.a.d2(q.d,0) +B.a.d2(q.e,1)}i=r.d +p=i.length +if(p!==0){if(0>=p)return A.c(i,0) +i=i[0]===".."}else i=!1 +if(i)throw A.f(A.rI(k+a+'" from "'+s+'".')) +i=t.N +B.a.eY(q.d,0,A.aE(p,"..",!1,i)) +B.a.k(q.e,0,"") +B.a.eY(q.e,1,A.aE(r.d.length,j.gce(),!1,i)) +j=q.d +i=j.length +if(i===0)return"." +if(i>1&&B.a.gA(j)==="."){B.a.d3(q.d) +j=q.e +if(0>=j.length)return A.c(j,-1) +j.pop() +if(0>=j.length)return A.c(j,-1) +j.pop() +B.a.l(j,"")}q.b="" +q.iv() +return q.j(0)}, +il(a){var s,r,q=this,p=A.u8(a) +if(p.gaV()==="file"&&q.a===$.hF())return p.j(0) +else if(p.gaV()!=="file"&&p.gaV()!==""&&q.a!==$.hF())return p.j(0) +s=q.dP(q.a.f4(A.u8(p))) +r=q.o7(s) +return q.d9(0,r).length>q.d9(0,s).length?s:r}} +A.lP.prototype={ +$1(a){return A.q(a)!==""}, +$S:4} +A.lQ.prototype={ +$1(a){return A.q(a).length!==0}, +$S:4} +A.pg.prototype={ +$1(a){A.hB(a) +return a==null?"null":'"'+a+'"'}, +$S:60} +A.e1.prototype={ +iQ(a){var s,r=this.aU(a) +if(r>0)return B.b.t(a,0,r) +if(this.bO(a)){if(0>=a.length)return A.c(a,0) +s=a[0]}else s=null +return s}, +f5(a,b){return a===b}} +A.ni.prototype={ +iv(){var s,r,q=this +for(;;){s=q.d +if(!(s.length!==0&&B.a.gA(s)===""))break +B.a.d3(q.d) +s=q.e +if(0>=s.length)return A.c(s,-1) +s.pop()}s=q.e +r=s.length +if(r!==0)B.a.k(s,r-1,"")}, +f2(){var s,r,q,p,o,n,m=this,l=A.i([],t.s) +for(s=m.d,r=s.length,q=0,p=0;p=n)return A.c(l,-1) +l.pop()}else ++q}else B.a.l(l,o)}if(m.b==null)B.a.eY(l,0,A.aE(q,"..",!1,t.N)) +if(l.length===0&&m.b==null)B.a.l(l,".") +m.d=l +s=m.a +m.e=A.aE(l.length+1,s.gce(),!0,t.N) +r=m.b +if(r==null||l.length===0||!s.cW(r))B.a.k(m.e,0,"") +r=m.b +if(r!=null&&s===$.lC())m.b=A.cO(r,"/","\\") +m.iv()}, +j(a){var s,r,q,p,o,n=this.b +n=n!=null?n:"" +for(s=this.d,r=s.length,q=this.e,p=q.length,o=0;o=0))return A.c(a,s) +s=a.charCodeAt(s)!==47 +r=s}else r=!1 +return r}, +cv(a,b){var s=a.length +if(s!==0){if(0>=s)return A.c(a,0) +s=a.charCodeAt(0)===47}else s=!1 +if(s)return 1 +return 0}, +aU(a){return this.cv(a,!1)}, +bO(a){return!1}, +f4(a){var s +if(a.gaV()===""||a.gaV()==="file"){s=a.gaT() +return A.d9(s,0,s.length,B.E,!1)}throw A.f(A.W("Uri "+a.j(0)+" must have scheme 'file:'.",null))}, +ga8(){return"posix"}, +gce(){return"/"}} +A.k3.prototype={ +eH(a){return B.b.C(a,"/")}, +by(a){return a===47}, +cW(a){var s,r=a.length +if(r===0)return!1 +s=r-1 +if(!(s>=0))return A.c(a,s) +if(a.charCodeAt(s)!==47)return!0 +return B.b.bu(a,"://")&&this.aU(a)===r}, +cv(a,b){var s,r,q,p=a.length +if(p===0)return 0 +if(0>=p)return A.c(a,0) +if(a.charCodeAt(0)===47)return 1 +for(s=0;s=s)return A.c(a,0) +s=a.charCodeAt(0)===47}else s=!1 +return s}, +f4(a){return a.j(0)}, +ga8(){return"url"}, +gce(){return"/"}} +A.k9.prototype={ +eH(a){return B.b.C(a,"/")}, +by(a){return a===47||a===92}, +cW(a){var s,r=a.length +if(r===0)return!1 +s=r-1 +if(!(s>=0))return A.c(a,s) +s=a.charCodeAt(s) +return!(s===47||s===92)}, +cv(a,b){var s,r,q=a.length +if(q===0)return 0 +if(0>=q)return A.c(a,0) +if(a.charCodeAt(0)===47)return 1 +if(a.charCodeAt(0)===92){if(q>=2){if(1>=q)return A.c(a,1) +s=a.charCodeAt(1)!==92}else s=!0 +if(s)return 1 +r=B.b.ap(a,"\\",2) +if(r>0){r=B.b.ap(a,"\\",r+1) +if(r>0)return r}return q}if(q<3)return 0 +if(!A.ux(a.charCodeAt(0)))return 0 +if(a.charCodeAt(1)!==58)return 0 +q=a.charCodeAt(2) +if(!(q===47||q===92))return 0 +return 3}, +aU(a){return this.cv(a,!1)}, +bO(a){return this.aU(a)===1}, +f4(a){var s,r +if(a.gaV()!==""&&a.gaV()!=="file")throw A.f(A.W("Uri "+a.j(0)+" must have scheme 'file:'.",null)) +s=a.gaT() +if(a.gc6()===""){if(s.length>=3&&B.b.U(s,"/")&&A.ur(s,1)!=null)s=B.b.d4(s,"/","")}else s="\\\\"+a.gc6()+s +r=A.cO(s,"/","\\") +return A.d9(r,0,r.length,B.E,!1)}, +m3(a,b){var s +if(a===b)return!0 +if(a===47)return b===92 +if(a===92)return b===47 +if((a^b)!==32)return!1 +s=a|32 +return s>=97&&s<=122}, +f5(a,b){var s,r,q +if(a===b)return!0 +s=a.length +r=b.length +if(s!==r)return!1 +for(q=0;q=0)return A.c(s,0) +return!1}return!0}return!1}, +gq(a){return J.B(this.a)}, +$inC:1} +A.fr.prototype={ +gF(a){var s=this +return new A.fs(s.a,s.b,!1,s.c,s.$ti.h("fs<1>"))}} +A.fs.prototype={ +gB(){var s=this.e +s===$&&A.o() +return s}, +p(){var s,r,q,p,o,n=this +for(s=n.b,r=s.length,q=n.a;p=n.d,p<=r;){o=q.a.I(s,p) +p=n.d +if(o<0)n.d=p+1 +else{n.e=n.$ti.c.a(q.H(new A.cb(s,p)).gR()) +s=n.d +if(s===o)n.d=s+1 +else n.d=o +return!0}}return!1}, +$iL:1} +A.cp.prototype={ +H(a){var s,r=a.a,q=a.b,p=this.a.I(r,q) +if(p<0)return new A.F(this.b,r,q) +s=B.b.t(r,q,p) +return new A.T(s,r,p,t.y)}, +I(a,b){return this.a.I(a,b)}, +j(a){var s=this.bE(0) +return s+"["+this.b+"]"}} +A.fq.prototype={ +H(a){var s,r,q=this.a.H(a) +if(q instanceof A.F)return q +s=this.$ti +r=s.y[1].a(this.b.$1(q.gR())) +return new A.T(r,q.a,q.b,s.h("T<2>"))}, +I(a,b){var s=this.a.I(a,b) +return s}} +A.fU.prototype={ +H(a){var s,r,q,p=this.a.H(a) +if(p instanceof A.F)return p +s=p.b +r=this.$ti +q=r.h("cB<1>") +q=q.a(new A.cB(p.gR(),a.a,a.b,s,q)) +return new A.T(q,p.a,s,r.h("T>"))}, +I(a,b){return this.a.I(a,b)}} +A.pQ.prototype={ +$1(a){return this.a.H(new A.cb(A.q(a),0)).gR()}, +$S:61} +A.pc.prototype={ +$1(a){var s,r,q +A.q(a) +s=this.a +r=s?new A.bV(a):new A.ah(a) +q=r.gbU(r) +r=s?new A.bV(a):new A.ah(a) +return new A.ab(q,r.gbU(r))}, +$S:62} +A.pd.prototype={ +$3(a,b,c){var s,r,q +A.q(a) +A.q(b) +A.q(c) +s=this.a +r=s?new A.bV(a):new A.ah(a) +q=r.gbU(r) +r=s?new A.bV(c):new A.ah(c) +return new A.ab(q,r.gbU(r))}, +$S:63} +A.ca.prototype={ +j(a){return A.cN(this).j(0)}} +A.fM.prototype={ +b9(a){return this.a===a}, +j(a){return this.cG(0)+"("+this.a+")"}} +A.ck.prototype={ +b9(a){return this.a}, +j(a){return this.cG(0)+"("+this.a+")"}} +A.j4.prototype={ +jV(a){var s,r,q,p,o,n,m,l,k,j,i,h +for(s=a.length,r=this.a,q=this.c,p=q.length,o=q.$flags|0,n=0;n>>0}}}, +b9(a){var s=this.a,r=!1 +if(s<=a)if(a<=this.b){s=a-s +s=(this.c[B.f.b5(s,5)]&B.d2[s&31])>>>0!==0}else s=r +else s=r +return s}, +j(a){var s=this +return s.cG(0)+"("+s.a+", "+s.b+", "+A.k(s.c)+")"}} +A.jj.prototype={ +b9(a){return!this.a.b9(a)}, +j(a){return this.cG(0)+"("+this.a.j(0)+")"}} +A.ab.prototype={ +b9(a){return this.a<=a&&a<=this.b}, +j(a){return this.cG(0)+"("+this.a+", "+this.b+")"}} +A.k8.prototype={ +b9(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0 +default:return!1}switch(a){case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0 +default:return!1}}} +A.pY.prototype={ +$1(a){var s +A.ax(a) +s=B.rn.m(0,a) +if(s!=null)return s +if(a<32)return"\\x"+B.b.nC(B.f.d6(a,16),2,"0") +return A.a4(a)}, +$S:37} +A.pP.prototype={ +$1(a){A.ax(a) +return new A.ab(a,a)}, +$S:65} +A.pN.prototype={ +$2(a,b){var s,r=t.eN +r.a(a) +r.a(b) +r=a.a +s=b.a +return r!==s?r-s:a.b-b.b}, +$S:66} +A.pO.prototype={ +$2(a,b){A.ax(a) +t.eN.a(b) +return a+(b.b-b.a+1)}, +$S:67} +A.eO.prototype={ +H(a){var s,r,q,p,o=this.a,n=o[0].H(a) +if(!(n instanceof A.F))return n +for(s=o.length,r=this.b,q=n,p=1;p=0)return q}return q}} +A.au.prototype={ +gaN(){return A.i([this.a],t.a)}, +b8(a,b){var s=this +s.bX(a,b) +if(s.a.v(0,a))s.a=A.x(s).h("n").a(b)}} +A.fH.prototype={ +H(a){var s,r,q=this.a.H(a) +if(q instanceof A.F)return q +s=this.b.H(q) +if(s instanceof A.F)return s +r=this.$ti +q=r.h("+(1,2)").a(new A.l(q.gR(),s.gR())) +return new A.T(q,s.a,s.b,r.h("T<+(1,2)>"))}, +I(a,b){b=this.a.I(a,b) +if(b<0)return-1 +b=this.b.I(a,b) +if(b<0)return-1 +return b}, +gaN(){return A.i([this.a,this.b],t.a)}, +b8(a,b){var s=this +s.bX(a,b) +if(s.a.v(0,a))s.a=s.$ti.h("n<1>").a(b) +if(s.b.v(0,a))s.b=s.$ti.h("n<2>").a(b)}} +A.nv.prototype={ +$1(a){this.b.h("@<0>").u(this.c).h("+(1,2)").a(a) +return this.a.$2(a.a,a.b)}, +$S(){return this.d.h("@<0>").u(this.b).u(this.c).h("1(+(2,3))")}} +A.dB.prototype={ +H(a){var s,r,q,p=this,o=p.a.H(a) +if(o instanceof A.F)return o +s=p.b.H(o) +if(s instanceof A.F)return s +r=p.c.H(s) +if(r instanceof A.F)return r +q=p.$ti +s=q.h("+(1,2,3)").a(new A.hl(o.gR(),s.gR(),r.gR())) +return new A.T(s,r.a,r.b,q.h("T<+(1,2,3)>"))}, +I(a,b){b=this.a.I(a,b) +if(b<0)return-1 +b=this.b.I(a,b) +if(b<0)return-1 +b=this.c.I(a,b) +if(b<0)return-1 +return b}, +gaN(){return A.i([this.a,this.b,this.c],t.a)}, +b8(a,b){var s=this +s.bX(a,b) +if(s.a.v(0,a))s.a=s.$ti.h("n<1>").a(b) +if(s.b.v(0,a))s.b=s.$ti.h("n<2>").a(b) +if(s.c.v(0,a))s.c=s.$ti.h("n<3>").a(b)}} +A.nw.prototype={ +$1(a){var s=this +s.b.h("@<0>").u(s.c).u(s.d).h("+(1,2,3)").a(a) +return s.a.$3(a.a,a.b,a.c)}, +$S(){var s=this +return s.e.h("@<0>").u(s.b).u(s.c).u(s.d).h("1(+(2,3,4))")}} +A.fI.prototype={ +H(a){var s,r,q,p,o=this,n=o.a.H(a) +if(n instanceof A.F)return n +s=o.b.H(n) +if(s instanceof A.F)return s +r=o.c.H(s) +if(r instanceof A.F)return r +q=o.d.H(r) +if(q instanceof A.F)return q +p=o.$ti +r=p.h("+(1,2,3,4)").a(new A.hm([n.gR(),s.gR(),r.gR(),q.gR()])) +return new A.T(r,q.a,q.b,p.h("T<+(1,2,3,4)>"))}, +I(a,b){var s=this +b=s.a.I(a,b) +if(b<0)return-1 +b=s.b.I(a,b) +if(b<0)return-1 +b=s.c.I(a,b) +if(b<0)return-1 +b=s.d.I(a,b) +if(b<0)return-1 +return b}, +gaN(){var s=this +return A.i([s.a,s.b,s.c,s.d],t.a)}, +b8(a,b){var s=this +s.bX(a,b) +if(s.a.v(0,a))s.a=s.$ti.h("n<1>").a(b) +if(s.b.v(0,a))s.b=s.$ti.h("n<2>").a(b) +if(s.c.v(0,a))s.c=s.$ti.h("n<3>").a(b) +if(s.d.v(0,a))s.d=s.$ti.h("n<4>").a(b)}} +A.ny.prototype={ +$1(a){var s=this,r=s.b.h("@<0>").u(s.c).u(s.d).u(s.e).h("+(1,2,3,4)").a(a).a +return s.a.$4(r[0],r[1],r[2],r[3])}, +$S(){var s=this +return s.f.h("@<0>").u(s.b).u(s.c).u(s.d).u(s.e).h("1(+(2,3,4,5))")}} +A.fJ.prototype={ +H(a){var s,r,q,p,o,n=this,m=n.a.H(a) +if(m instanceof A.F)return m +s=n.b.H(m) +if(s instanceof A.F)return s +r=n.c.H(s) +if(r instanceof A.F)return r +q=n.d.H(r) +if(q instanceof A.F)return q +p=n.e.H(q) +if(p instanceof A.F)return p +o=n.$ti +q=o.h("+(1,2,3,4,5)").a(new A.hn([m.gR(),s.gR(),r.gR(),q.gR(),p.gR()])) +return new A.T(q,p.a,p.b,o.h("T<+(1,2,3,4,5)>"))}, +I(a,b){var s=this +b=s.a.I(a,b) +if(b<0)return-1 +b=s.b.I(a,b) +if(b<0)return-1 +b=s.c.I(a,b) +if(b<0)return-1 +b=s.d.I(a,b) +if(b<0)return-1 +b=s.e.I(a,b) +if(b<0)return-1 +return b}, +gaN(){var s=this +return A.i([s.a,s.b,s.c,s.d,s.e],t.a)}, +b8(a,b){var s=this +s.bX(a,b) +if(s.a.v(0,a))s.a=s.$ti.h("n<1>").a(b) +if(s.b.v(0,a))s.b=s.$ti.h("n<2>").a(b) +if(s.c.v(0,a))s.c=s.$ti.h("n<3>").a(b) +if(s.d.v(0,a))s.d=s.$ti.h("n<4>").a(b) +if(s.e.v(0,a))s.e=s.$ti.h("n<5>").a(b)}} +A.nz.prototype={ +$1(a){var s=this,r=s.b.h("@<0>").u(s.c).u(s.d).u(s.e).u(s.f).h("+(1,2,3,4,5)").a(a).a +return s.a.$5(r[0],r[1],r[2],r[3],r[4])}, +$S(){var s=this +return s.r.h("@<0>").u(s.b).u(s.c).u(s.d).u(s.e).u(s.f).h("1(+(2,3,4,5,6))")}} +A.fK.prototype={ +H(a){var s,r,q,p,o,n,m,l,k=this,j=k.a.H(a) +if(j instanceof A.F)return j +s=k.b.H(j) +if(s instanceof A.F)return s +r=k.c.H(s) +if(r instanceof A.F)return r +q=k.d.H(r) +if(q instanceof A.F)return q +p=k.e.H(q) +if(p instanceof A.F)return p +o=k.f.H(p) +if(o instanceof A.F)return o +n=k.r.H(o) +if(n instanceof A.F)return n +m=k.w.H(n) +if(m instanceof A.F)return m +l=k.$ti +n=l.h("+(1,2,3,4,5,6,7,8)").a(new A.ho([j.gR(),s.gR(),r.gR(),q.gR(),p.gR(),o.gR(),n.gR(),m.gR()])) +return new A.T(n,m.a,m.b,l.h("T<+(1,2,3,4,5,6,7,8)>"))}, +I(a,b){var s=this +b=s.a.I(a,b) +if(b<0)return-1 +b=s.b.I(a,b) +if(b<0)return-1 +b=s.c.I(a,b) +if(b<0)return-1 +b=s.d.I(a,b) +if(b<0)return-1 +b=s.e.I(a,b) +if(b<0)return-1 +b=s.f.I(a,b) +if(b<0)return-1 +b=s.r.I(a,b) +if(b<0)return-1 +b=s.w.I(a,b) +if(b<0)return-1 +return b}, +gaN(){var s=this +return A.i([s.a,s.b,s.c,s.d,s.e,s.f,s.r,s.w],t.a)}, +b8(a,b){var s=this +s.bX(a,b) +if(s.a.v(0,a))s.a=s.$ti.h("n<1>").a(b) +if(s.b.v(0,a))s.b=s.$ti.h("n<2>").a(b) +if(s.c.v(0,a))s.c=s.$ti.h("n<3>").a(b) +if(s.d.v(0,a))s.d=s.$ti.h("n<4>").a(b) +if(s.e.v(0,a))s.e=s.$ti.h("n<5>").a(b) +if(s.f.v(0,a))s.f=s.$ti.h("n<6>").a(b) +if(s.r.v(0,a))s.r=s.$ti.h("n<7>").a(b) +if(s.w.v(0,a))s.w=s.$ti.h("n<8>").a(b)}} +A.nA.prototype={ +$1(a){var s=this,r=s.b.h("@<0>").u(s.c).u(s.d).u(s.e).u(s.f).u(s.r).u(s.w).u(s.x).h("+(1,2,3,4,5,6,7,8)").a(a).a +return s.a.$8(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7])}, +$S(){var s=this +return s.y.h("@<0>").u(s.b).u(s.c).u(s.d).u(s.e).u(s.f).u(s.r).u(s.w).u(s.x).h("1(+(2,3,4,5,6,7,8,9))")}} +A.ds.prototype={ +b8(a,b){var s,r,q,p +this.bX(a,b) +for(s=this.a,r=s.length,q=this.$ti.h("n"),p=0;p"))}, +I(a,b){var s=this.a.I(a,b) +return s<0?b:s}} +A.fP.prototype={ +H(a){var s,r,q,p,o=this,n=o.b.H(a) +if(n instanceof A.F)return n +s=o.a.H(n) +if(s instanceof A.F)return s +r=o.c.H(s) +if(r instanceof A.F)return r +q=o.$ti +p=q.c.a(s.gR()) +return new A.T(p,r.a,r.b,q.h("T<1>"))}, +I(a,b){b=this.b.I(a,b) +if(b<0)return-1 +b=this.a.I(a,b) +if(b<0)return-1 +return this.c.I(a,b)}, +gaN(){return A.i([this.b,this.a,this.c],t.a)}, +b8(a,b){var s=this +s.fJ(a,b) +if(s.b.v(0,a))s.b=b +if(s.c.v(0,a))s.c=b}} +A.id.prototype={ +H(a){var s=a.b,r=a.a +if(s"))}, +I(a,b){return b}, +j(a){return this.bE(0)+"["+A.k(this.a)+"]"}} +A.jg.prototype={ +H(a){var s,r=a.a,q=a.b,p=r.length +if(q=s.c){o=B.b.t(r,q,m) +o=new A.T(o,r,m,t.y)}else o=new A.F(s.b,r,m) +return o}, +I(a,b){var s=a.length,r=this.d,q=this.a,p=0 +for(;;){if(!(p=this.c?b:-1}, +j(a){var s=this,r=s.bE(0),q=s.d +return r+"["+s.b+", "+s.c+".."+A.k(q===9007199254740991?"*":q)+"]"}} +A.bj.prototype={ +H(a){var s,r,q,p,o=this,n=o.$ti,m=A.i([],n.h("y<1>")) +for(s=o.b,r=a;m.length=s)return p +q=o.a.H(r) +if(q instanceof A.F)return p +B.a.l(m,q.gR())}else{n.h("m<1>").a(m) +return new A.T(m,r.a,r.b,n.h("T>"))}}}, +I(a,b){var s,r,q,p,o=this +for(s=o.b,r=b,q=0;q=s)return-1 +p=o.a.I(a,r) +if(p<0)return-1;++q}else return r}} +A.fm.prototype={ +gaN(){return A.i([this.a,this.e],t.a)}, +b8(a,b){this.fJ(a,b) +if(this.e.v(0,a))this.e=b}} +A.fB.prototype={ +H(a){var s,r,q,p=this,o=p.$ti,n=A.i([],o.h("y<1>")) +for(s=p.b,r=a;n.length").a(n) +return new A.T(n,r.a,r.b,o.h("T>"))}, +I(a,b){var s,r,q,p,o=this +for(s=o.b,r=b,q=0;q=q.gn(a)||q.m(a,l)!==10)m=10}if(m===10)B.a.l(o,n+1)}}, +K(a,b){return A.qy(this,a,b)}, +cC(a){var s,r=this +if(a<0)throw A.f(A.aQ("Offset may not be negative, was "+a+".")) +else if(a>r.c.length)throw A.f(A.aQ("Offset "+a+u.D+r.gn(0)+".")) +s=r.b +if(a=B.a.gA(s))return s.length-1 +if(r.kx(a)){s=r.d +s.toString +return s}return r.d=r.k6(a)-1}, +kx(a){var s,r,q,p=this.d +if(p==null)return!1 +s=this.b +r=s.length +if(p>>>0!==p||p>=r)return A.c(s,p) +if(a=r-1)){q=p+1 +if(!(q=r-2)){q=p+2 +if(!(q=0&&ra)o=r +else s=r+1}return o}, +e0(a){var s,r,q,p=this +if(a<0)throw A.f(A.aQ("Offset may not be negative, was "+a+".")) +else if(a>p.c.length)throw A.f(A.aQ("Offset "+a+" must be not be greater than the number of characters in the file, "+p.gn(0)+".")) +s=p.cC(a) +r=p.b +if(!(s>=0&&sa)throw A.f(A.aQ("Line "+s+" comes after offset "+a+".")) +return a-q}, +d7(a){var s,r,q,p +if(a<0)throw A.f(A.aQ("Line may not be negative, was "+a+".")) +else{s=this.b +r=s.length +if(a>=r)throw A.f(A.aQ("Line "+a+" must be less than the number of lines in the file, "+this.gnm()+"."))}q=s[a] +if(q<=this.c.length){p=a+1 +s=p=s[p]}else s=!0 +if(s)throw A.f(A.aQ("Line "+a+" doesn't have 0 columns.")) +return q}} +A.bh.prototype={ +ga6(){return this.a.a}, +gaj(){return this.a.cC(this.b)}, +gao(){return this.a.e0(this.b)}, +bh(a,b){var s,r=this.b +if(r<0)throw A.f(A.aQ("Offset may not be negative, was "+r+".")) +else{s=this.a +if(r>s.c.length)throw A.f(A.aQ("Offset "+r+u.D+s.gn(0)+"."))}}, +gaw(){return this.b}} +A.aw.prototype={ +ga6(){return this.a.a}, +gn(a){return this.c-this.b}, +gS(){return A.cU(this.a,this.b)}, +gV(){return A.cU(this.a,this.c)}, +gZ(){return A.aA(B.aA.am(this.a.c,this.b,this.c),0,null)}, +gb_(){var s=this,r=s.a,q=s.c,p=r.cC(q) +if(r.e0(q)===0&&p!==0){if(q-s.b===0)return p===r.b.length-1?"":A.aA(B.aA.am(r.c,r.d7(p),r.d7(p+1)),0,null)}else q=p===r.b.length-1?r.c.length:r.d7(p+1) +return A.aA(B.aA.am(r.c,r.d7(r.cC(s.b)),q),0,null)}, +aG(a,b,c){var s,r=this.c,q=this.b +if(rs.c.length)throw A.f(A.aQ("End "+r+u.D+s.gn(0)+".")) +else if(q<0)throw A.f(A.aQ("Start may not be negative, was "+q+"."))}}, +ai(a,b){var s +t.hs.a(b) +if(!(b instanceof A.aw))return this.jP(0,b) +s=B.f.ai(this.b,b.b) +return s===0?B.f.ai(this.c,b.c):s}, +v(a,b){var s=this +if(b==null)return!1 +if(!(b instanceof A.aw))return s.jO(0,b) +return s.b===b.b&&s.c===b.c&&J.N(s.a.a,b.a.a)}, +gq(a){return A.aX(this.b,this.c,this.a.a,B.u)}, +aO(a,b){var s,r=this,q=r.a +if(!J.N(q.a,b.a.a))throw A.f(A.W('Source URLs "'+A.k(r.ga6())+'" and "'+A.k(b.ga6())+"\" don't match.",null)) +s=Math.min(r.b,b.b) +return A.qy(q,s,Math.max(r.c,b.c))}, +$irq:1, +$icd:1} +A.me.prototype={ +n7(){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=this,a0=null,a1=a.a +a.hC(B.a.gbv(a1).c) +s=a.e +r=A.aE(s,a0,!1,t.dd) +for(q=a.r,s=s!==0,p=a.b,o=0;o0){m=a1[o-1] +l=n.c +if(!J.N(m.c,l)){a.dw("\u2575") +q.a+="\n" +a.hC(l)}else if(m.b+1!==n.b){a.la("...") +q.a+="\n"}}for(l=n.d,k=A.w(l).h("X<1>"),j=new A.X(l,k),j=new A.M(j,j.gn(0),k.h("M")),k=k.h("G.E"),i=n.b,h=n.a;j.p();){g=j.d +if(g==null)g=k.a(g) +f=g.a +if(f.gS().gaj()!==f.gV().gaj()&&f.gS().gaj()===i&&a.ky(B.b.t(h,0,f.gS().gao()))){e=B.a.al(r,a0) +if(e<0)A.P(A.W(A.k(r)+" contains no null elements.",a0)) +B.a.k(r,e,g)}}a.l9(i) +q.a+=" " +a.l8(n,r) +if(s)q.a+=" " +d=B.a.eX(l,new A.mz()) +if(d===-1)c=a0 +else{if(!(d>=0&&d")),q=this.r,r=r.h("C.E");s.p();){p=s.d +if(p==null)p=r.a(p) +if(p===9)q.a+=B.b.b2(" ",4) +else{p=A.a4(p) +q.a+=p}}}, +dz(a,b,c){var s={} +s.a=c +if(b!=null)s.a=B.f.j(b+1) +this.b3(new A.mx(s,this,a),"\x1b[34m",t.d)}, +dw(a){return this.dz(a,null,null)}, +la(a){return this.dz(null,null,a)}, +l9(a){return this.dz(null,a,null)}, +ev(){return this.dz(null,null,null)}, +ed(a){var s,r,q,p +for(s=new A.ah(a),r=t.gS,s=new A.M(s,s.gn(0),r.h("M")),r=r.h("C.E"),q=0;s.p();){p=s.d +if((p==null?r.a(p):p)===9)++q}return q}, +ky(a){var s,r,q +for(s=new A.ah(a),r=t.gS,s=new A.M(s,s.gn(0),r.h("M")),r=r.h("C.E");s.p();){q=s.d +if(q==null)q=r.a(q) +if(q!==32&&q!==9)return!1}return!0}, +b3(a,b,c){var s,r +c.h("0()").a(a) +s=this.b!=null +if(s&&b!=null)this.r.a+=b +r=a.$0() +if(s&&b!=null)this.r.a+="\x1b[0m" +return r}} +A.my.prototype={ +$0(){return this.a}, +$S:68} +A.mg.prototype={ +$1(a){var s=t.nR.a(a).d,r=A.w(s) +return new A.b_(s,r.h("A(1)").a(new A.mf()),r.h("b_<1>")).gn(0)}, +$S:69} +A.mf.prototype={ +$1(a){var s=t.D.a(a).a +return s.gS().gaj()!==s.gV().gaj()}, +$S:21} +A.mh.prototype={ +$1(a){return t.nR.a(a).c}, +$S:71} +A.mj.prototype={ +$1(a){var s=t.D.a(a).a.ga6() +return s==null?new A.p():s}, +$S:72} +A.mk.prototype={ +$2(a,b){var s=t.D +return s.a(a).a.ai(0,s.a(b).a)}, +$S:73} +A.ml.prototype={ +$1(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a +t.lO.a(a0) +s=a0.a +r=a0.b +q=A.i([],t.dg) +for(p=J.c4(r),o=p.gF(r),n=t.g7;o.p();){m=o.gB().a +l=m.gb_() +k=A.pA(l,m.gZ(),m.gS().gao()) +k.toString +j=B.b.dB("\n",B.b.t(l,0,k)).gn(0) +i=m.gS().gaj()-j +for(m=l.split("\n"),k=m.length,h=0;hB.a.gA(q).b)B.a.l(q,new A.bD(g,i,s,A.i([],n)));++i}}f=A.i([],n) +for(o=q.length,n=t.aP,e=f.$flags|0,d=0,h=0;h")),b=g.b,k=k.h("G.E");m.p();){a=m.d +if(a==null)a=k.a(a) +if(a.a.gS().gaj()>b)break +B.a.l(f,a)}d+=f.length-c +B.a.a1(g.d,f)}return q}, +$S:74} +A.mi.prototype={ +$1(a){return t.D.a(a).a.gV().gaj()" +return null}, +$S:1} +A.mt.prototype={ +$0(){var s=this.a.r,r=this.b===this.c.b?"\u250c":"\u2514" +s.a+=r}, +$S:3} +A.mu.prototype={ +$0(){var s=this.a.r,r=this.b==null?"\u2500":"\u253c" +s.a+=r}, +$S:3} +A.mv.prototype={ +$0(){this.a.r.a+="\u2500" +return null}, +$S:1} +A.mw.prototype={ +$0(){var s,r,q=this,p=q.a,o=p.a?"\u253c":"\u2502" +if(q.c!=null)q.b.r.a+=o +else{s=q.e +r=s.b +if(q.d===r){s=q.b +s.b3(new A.mr(p,s),p.b,t.d) +p.a=!0 +if(p.b==null)p.b=s.b}else{s=q.r===r&&q.f.a.gV().gao()===s.a.length +r=q.b +if(s)r.r.a+="\u2514" +else r.b3(new A.ms(r,o),p.b,t.d)}}}, +$S:3} +A.mr.prototype={ +$0(){var s=this.b.r,r=this.a.a?"\u252c":"\u250c" +s.a+=r}, +$S:3} +A.ms.prototype={ +$0(){this.a.r.a+=this.b}, +$S:3} +A.mn.prototype={ +$0(){var s=this +return s.a.dA(B.b.t(s.b,s.c,s.d))}, +$S:1} +A.mo.prototype={ +$0(){var s,r,q=this.a,p=q.r,o=p.a,n=this.c.a,m=n.gS().gao(),l=n.gV().gao() +n=this.b.a +s=q.ed(B.b.t(n,0,m)) +r=q.ed(B.b.t(n,m,l)) +m+=s*3 +n=(p.a+=B.b.b2(" ",m))+B.b.b2("^",Math.max(l+(s+r)*3-m,1)) +p.a=n +return n.length-o.length}, +$S:34} +A.mp.prototype={ +$0(){return this.a.l5(this.b,this.c.a.gS().gao())}, +$S:1} +A.mq.prototype={ +$0(){var s=this,r=s.a,q=r.r,p=q.a +if(s.b)q.a=p+B.b.b2("\u2500",3) +else r.hB(s.c,Math.max(s.d.a.gV().gao()-1,0),!1) +return q.a.length-p.length}, +$S:34} +A.mx.prototype={ +$0(){var s=this.b,r=s.r,q=this.a.a +if(q==null)q="" +s=B.b.nD(q,s.d) +s=r.a+=s +q=this.c +r.a=s+(q==null?"\u2502":q)}, +$S:3} +A.aL.prototype={ +j(a){var s=this.a +s="primary "+(""+s.gS().gaj()+":"+s.gS().gao()+"-"+s.gV().gaj()+":"+s.gV().gao()) +return s.charCodeAt(0)==0?s:s}} +A.oP.prototype={ +$0(){var s,r,q,p,o=this.a +if(!(t.ol.b(o)&&A.pA(o.gb_(),o.gZ(),o.gS().gao())!=null)){s=A.jO(o.gS().gaw(),0,0,o.ga6()) +r=o.gV().gaw() +q=o.ga6() +p=A.yV(o.gZ(),10) +o=A.nL(s,A.jO(r,A.tu(o.gZ()),p,q),o.gZ(),o.gZ())}return A.xe(A.xg(A.xf(o)))}, +$S:76} +A.bD.prototype={ +j(a){return""+this.b+': "'+this.a+'" ('+B.a.aq(this.d,", ")+")"}} +A.bW.prototype={ +eK(a){var s=this.a +if(!J.N(s,a.ga6()))throw A.f(A.W('Source URLs "'+A.k(s)+'" and "'+A.k(a.ga6())+"\" don't match.",null)) +return Math.abs(this.b-a.gaw())}, +ai(a,b){var s +t.hq.a(b) +s=this.a +if(!J.N(s,b.ga6()))throw A.f(A.W('Source URLs "'+A.k(s)+'" and "'+A.k(b.ga6())+"\" don't match.",null)) +return this.b-b.gaw()}, +v(a,b){if(b==null)return!1 +return t.hq.b(b)&&J.N(this.a,b.ga6())&&this.b===b.gaw()}, +gq(a){var s=this.a +s=s==null?null:s.gq(s) +if(s==null)s=0 +return s+this.b}, +j(a){var s=this,r=A.cN(s).j(0),q=s.a +return"<"+r+": "+s.b+" "+(A.k(q==null?"unknown source":q)+":"+(s.c+1)+":"+(s.d+1))+">"}, +$ia6:1, +ga6(){return this.a}, +gaw(){return this.b}, +gaj(){return this.c}, +gao(){return this.d}} +A.jP.prototype={ +eK(a){if(!J.N(this.a.a,a.ga6()))throw A.f(A.W('Source URLs "'+A.k(this.ga6())+'" and "'+A.k(a.ga6())+"\" don't match.",null)) +return Math.abs(this.b-a.gaw())}, +ai(a,b){t.hq.a(b) +if(!J.N(this.a.a,b.ga6()))throw A.f(A.W('Source URLs "'+A.k(this.ga6())+'" and "'+A.k(b.ga6())+"\" don't match.",null)) +return this.b-b.gaw()}, +v(a,b){if(b==null)return!1 +return t.hq.b(b)&&J.N(this.a.a,b.ga6())&&this.b===b.gaw()}, +gq(a){var s=this.a.a +s=s==null?null:s.gq(s) +if(s==null)s=0 +return s+this.b}, +j(a){var s=A.cN(this).j(0),r=this.b,q=this.a,p=q.a +return"<"+s+": "+r+" "+(A.k(p==null?"unknown source":p)+":"+(q.cC(r)+1)+":"+(q.e0(r)+1))+">"}, +$ia6:1, +$ibW:1} +A.jQ.prototype={ +jW(a,b,c){var s,r=this.b,q=this.a +if(!J.N(r.ga6(),q.ga6()))throw A.f(A.W('Source URLs "'+A.k(q.ga6())+'" and "'+A.k(r.ga6())+"\" don't match.",null)) +else if(r.gaw()'}, +$ia6:1, +$ibJ:1} +A.cd.prototype={ +gb_(){return this.d}} +A.aJ.prototype={ +j(a){var s,r=this,q=r.a +if(q!=null){s=r.b.c +s="PUBLIC "+s+q+s +q=s}else q="SYSTEM" +s=r.d.c +s=q+" "+s+r.c+s +return s.charCodeAt(0)==0?s:s}, +gq(a){return A.aX(this.c,this.a,B.u,B.u)}, +v(a,b){if(b==null)return!1 +return b instanceof A.aJ}} +A.kd.prototype={ +mi(a){var s=a.length +if(s>1&&a[0]==="#"){if(s>2){s=a[1] +s=s==="x"||s==="X"}else s=!1 +if(s)return this.h3(B.b.ab(a,2),16) +else return this.h3(B.b.ab(a,1),10)}else return B.qL.m(0,a)}, +h3(a,b){var s=A.jD(a,b) +if(s==null||s<0||1114111=r)return A.c(s,-1) +s=s.pop() +this.b=s +this.ir(s) +return!0}}, +$iL:1} +A.on.prototype={ +$1(a){t.I.a(a) +return a instanceof A.es||a instanceof A.en}, +$S:29} +A.oo.prototype={ +$1(a){return t.I.a(a).gR()}, +$S:77} +A.nX.prototype={ +gaZ(){return B.j9}, +fs(a,b){return null}} +A.ep.prototype={ +fq(a,b){var s=this.fs(a,b) +return s==null?null:s.b}, +cd(a){return this.fq(a,null)}, +fs(a,b){var s,r,q,p=A.un(a,b) +for(s=this.gaZ().a,r=A.w(s),s=new J.J(s,s.length,r.h("J<1>")),r=r.c;s.p();){q=s.d +if(q==null)q=r.a(q) +if(p.$1(q))return q}return null}, +gaZ(){return this.y$}} +A.nY.prototype={ +gaN(){return B.cZ}} +A.d6.prototype={ +gaN(){return this.w$}} +A.cG.prototype={} +A.aS.prototype={ +gca(){return null}, +ey(a){return this.eu()}, +eu(){return A.P(A.ac(this.j(0)+" does not have a parent"))}} +A.Z.prototype={ +gca(){return this.x$}, +ey(a){A.x(this).h("Z.T").a(a) +A.kp(this) +this.x$=a}} +A.op.prototype={ +gR(){return null}} +A.aH.prototype={} +A.kn.prototype={ +iC(){var s,r=new A.Y(""),q=new A.kt(r,B.bF) +this.ah(q) +s=r.a +return s.charCodeAt(0)==0?s:s}, +j(a){return this.iC()}} +A.aR.prototype={ +gaS(){return B.hW}, +aB(){return A.nW(this.a.aB(),this.b,this.c)}, +ah(a){var s,r,q +this.a.ah(a) +s=a.a +s.a+="=" +r=this.c +q=r.c +q=q+a.b.i6(this.b,r)+q +s.a+=q +return null}, +ga8(){return this.a}, +gR(){return this.b}} +A.l_.prototype={} +A.l0.prototype={} +A.en.prototype={ +gaS(){return B.bA}, +aB(){return new A.en(this.a,null)}, +ah(a){var s=a.a,r=(s.a+="" +return null}} +A.fY.prototype={ +gaS(){return B.bD}, +aB(){return new A.fY(this.a,null)}, +ah(a){var s=a.a,r=(s.a+="" +return null}} +A.kb.prototype={ +gR(){return this.a}} +A.l1.prototype={} +A.kc.prototype={ +gR(){if(this.y$.a.length===0)return"" +var s=this.iC() +return B.b.t(s,6,s.length-2)}, +gaS(){return B.cH}, +aB(){var s=this.y$,r=s.a,q=A.w(r) +return A.tb(new A.Q(r,q.h("aR(1)").a(s.$ti.h("aR(1)").a(new A.nZ())),q.h("Q<1,aR>")))}, +ah(a){var s=a.a +s.a+="" +return null}} +A.nZ.prototype={ +$1(a){t.G.a(a) +return A.nW(a.a.aB(),a.b,a.c)}, +$S:35} +A.l2.prototype={} +A.l3.prototype={} +A.fZ.prototype={ +gaS(){return B.cI}, +aB(){return new A.fZ(this.a,this.b,this.c,null)}, +ah(a){var s,r=a.a,q=(r.a+="" +return null}} +A.l4.prototype={} +A.kf.prototype={ +gaS(){return B.MJ}, +aB(){var s=this.w$,r=s.a,q=A.w(r) +return A.tc(new A.Q(r,q.h("E(1)").a(s.$ti.h("E(1)").a(new A.o0())),q.h("Q<1,E>")))}, +ah(a){return a.ol(this)}} +A.o0.prototype={ +$1(a){return t.I.a(a).aB()}, +$S:36} +A.l5.prototype={} +A.aG.prototype={ +gaS(){return B.aT}, +aB(){var s=this,r=s.y$,q=r.a,p=A.w(q),o=s.w$,n=o.a,m=A.w(n) +return A.wY(s.b.aB(),new A.Q(q,p.h("aR(1)").a(r.$ti.h("aR(1)").a(new A.o1())),p.h("Q<1,aR>")),new A.Q(n,m.h("E(1)").a(o.$ti.h("E(1)").a(new A.o2())),m.h("Q<1,E>")),s.a)}, +ah(a){return a.om(this)}, +ga8(){return this.b}} +A.o1.prototype={ +$1(a){t.G.a(a) +return A.nW(a.a.aB(),a.b,a.c)}, +$S:35} +A.o2.prototype={ +$1(a){return t.I.a(a).aB()}, +$S:36} +A.l6.prototype={} +A.l7.prototype={} +A.l8.prototype={} +A.l9.prototype={} +A.E.prototype={} +A.ll.prototype={} +A.lm.prototype={} +A.ln.prototype={} +A.lo.prototype={} +A.lp.prototype={} +A.lq.prototype={} +A.h4.prototype={ +gaS(){return B.bB}, +aB(){return new A.h4(this.c,this.a,null)}, +ah(a){var s=a.a,r=s.a=(s.a+="" +return null}} +A.es.prototype={ +gaS(){return B.bC}, +aB(){return new A.es(this.a,null)}, +ah(a){var s=a.a,r=A.pV(this.a,$.r7(),t.jt.a(t.po.a(A.uq())),null) +s.a+=r +return null}} +A.ka.prototype={ +m(a,b){var s,r,q,p,o=this +o.$ti.c.a(b) +s=o.c +if(!s.a7(b)){s.k(0,b,o.a.$1(b)) +for(r=o.b,q=A.x(s).h("aV<1>");s.a>r;){p=new A.aV(s,q).gF(0) +if(!p.p())A.P(A.bi()) +s.W(0,p.gB())}}s=s.m(0,b) +s.toString +return s}} +A.eo.prototype={ +H(a){var s,r=a.a,q=a.b,p=r.length,o=q").a(b)) +o.jG(0,n) +for(s=n.length,r=0;r").a(a) +s=A.i([],p.h("y<1>")) +for(p=J.at(a);p.p();){r=p.gB() +if(r.gaS()===B.hX)B.a.a1(s,this.h7(r)) +else{q=this.c +q===$&&A.o() +if(!q.C(0,r.gaS()))A.P(A.wZ("Got "+r.gaS().j(0)+", but expected one of "+q.aq(0,", "),r,q)) +if(r.gca()!=null)A.P(A.tg(u.d,r,r.gca())) +B.a.l(s,r)}}return s}} +A.om.prototype={ +$1(a){var s,r +t.I.a(a) +s=this.a +r=s.c +r===$&&A.o() +A.tf(a,r) +return s.$ti.c.a(a.aB())}, +$S(){return this.a.$ti.h("1(E)")}} +A.h3.prototype={ +eu(){return A.P(A.n6(this,A.rw(B.hU,"oA",0,[],[],0)))}, +gcV(){var s=A.uA(this.x$,"xmlns",this.b) +return s==null?null:s.b}, +aB(){return new A.h3(this.b,this.c,this.d,null)}, +gik(){return this.b}, +ga_(){return this.c}, +gdS(){return this.d}} +A.h5.prototype={ +eu(){return A.P(A.n6(this,A.rw(B.hU,"oB",0,[],[],0)))}, +gik(){return null}, +gdS(){return this.b}, +gcV(){var s=A.uA(this.x$,null,"xmlns") +return s==null?null:s.b}, +aB(){return new A.h5(this.b,null)}, +ga_(){return this.b}} +A.ks.prototype={} +A.kt.prototype={ +ol(a){this.iJ(a.w$)}, +om(a){var s,r,q,p,o=this,n=o.a +n.a+="<" +s=a.b +s.ah(o) +o.iH(a) +r=a.w$ +q=r.a.length===0&&a.a +p=n.a +if(q)n.a=p+"/>" +else{n.a=p+">" +o.iJ(r) +n.a+=""}}, +iH(a){var s=a.y$ +if(s.a.length!==0){this.a.a+=" " +this.iK(s," ")}}, +iK(a,b){var s,r,q,p,o=this,n=J.at(t.b7.a(a)) +if(n.p())if(b==null||b.length===0){s=t.ax +r=n.$ti.c +do{q=n.d +s.a(q==null?r.a(q):q).ah(o)}while(n.p())}else{s=n.d +if(s==null)s=n.$ti.c.a(s) +r=t.ax +r.a(s).ah(o) +for(s=o.a,q=n.$ti.c;n.p();){s.a+=b +p=n.d +r.a(p==null?q.a(p):p).ah(o)}}}, +iJ(a){return this.iK(a,null)}} +A.lu.prototype={} +A.nV.prototype={ +lo(a,b,c,d){var s=this,r=s.r,q=r.length +if(q===0)A:{if(a instanceof A.bB){q=s.f +if(!new A.O(q,t.nk).gN(0))throw A.f(A.er("Expected at most one XML declaration",b,c)) +else if(q.length!==0)throw A.f(A.er("Unexpected XML declaration",b,c)) +B.a.l(q,a) +break A}if(a instanceof A.bC){q=s.f +if(!new A.O(q,t.os).gN(0))throw A.f(A.er("Expected at most one doctype declaration",b,c)) +else if(!new A.O(q,t.lH).gN(0))throw A.f(A.er("Unexpected doctype declaration",b,c)) +B.a.l(q,a) +break A}if(a instanceof A.bd){q=s.f +if(!new A.O(q,t.lH).gN(0))throw A.f(A.er("Unexpected root element",b,c)) +B.a.l(q,a)}}B:{if(a instanceof A.bd){if(!a.r)B.a.l(r,a) +break B}if(a instanceof A.bM){if(r.length===0)throw A.f(A.ti(a.e,b,c)) +else{q=a.e +if(B.a.gA(r).e!==q)throw A.f(A.th(B.a.gA(r).e,q,b,c))}q=r.length +if(q!==0){if(0>=q)return A.c(r,-1) +r.pop()}}}}} +A.ok.prototype={} +A.ol.prototype={} +A.km.prototype={} +A.kg.prototype={ +bL(a){var s,r=new A.Y("") +J.vk(t.iF.a(a),new A.ld(t.i3.a(new A.dg(r.got(),t.nP)),this.a).giE()) +s=r.a +return s.charCodeAt(0)==0?s:s}} +A.ld.prototype={ +fh(a){var s=this.a,r=s.$ti.c +r.a(""))}, +fi(a){var s=this.a,r=s.$ti.c +r.a(""))}, +fj(a){var s=this.a,r=s.$ti.c +r.a(""))}, +fk(a){var s,r,q=this.a,p=q.$ti.c +p.a(""))}, +fl(a){var s=this.a,r=s.$ti.c +r.a(""))}, +fm(a){var s,r=this.a,q=r.$ti.c +q.a(""))}, +fo(a){var s=this.a,r=s.$ti.c +r.a("<") +s=s.a +s.$1("<") +s.$1(r.a(a.e)) +this.hG(a.f) +if(a.r)s.$1(r.a("/>")) +else s.$1(r.a(">"))}, +fp(a){var s=this.a,r=s.$ti.c.a(A.pV(a.gR(),$.r7(),t.jt.a(t.po.a(A.uq())),null)) +s.a.$1(r)}, +hG(a){var s,r,q,p,o,n,m,l +for(s=J.at(t.p6.a(a)),r=this.a,q=r.$ti.c,p=this.b;s.p();){o=s.gB() +q.a(" ") +n=r.a +n.$1(" ") +n.$1(q.a(o.a)) +n.$1(q.a("=")) +m=o.b +o=o.c +l=o.c +n.$1(q.a(l+p.i6(m,o)+l))}}, +$ifN:1} +A.lv.prototype={} +A.lk.prototype={ +fh(a){return this.bK(new A.en(a.e,null),a)}, +fi(a){return this.bK(new A.fY(a.e,null),a)}, +fj(a){return this.bK(A.tb(this.eI(a.e)),a)}, +fk(a){return this.bK(new A.fZ(a.e,a.f,a.r,null),a)}, +fl(a){var s,r,q,p,o=this.b +if(o==null)throw A.f(A.ti(a.e,a.at$,a.Q$)) +s=o.b.gdS() +r=a.e +q=a.at$ +p=a.Q$ +if(s!==r)A.P(A.th(s,r,q,p)) +o.a=o.w$.a.length!==0 +s=A.x_(o) +this.b=s +if(s==null)this.bK(o,a.z$)}, +fm(a){return this.bK(new A.h4(a.e,a.f,null),a)}, +fo(a){var s,r=this,q=A.td(a.e,r.eI(a.f),B.cZ,!0) +if(a.r)r.bK(q,a) +else{s=r.b +if(s!=null)s.w$.l(0,q) +r.b=q}}, +fp(a){return this.bK(new A.es(a.gR(),null),a)}, +bK(a,b){var s,r,q,p=this.b +if(p==null){s=b==null?null:b.z$ +p=t.eB +r=a +for(;s!=null;s=s.z$)r=A.td(s.e,this.eI(s.f),A.i([r],p),s.r) +q=this.a +p=q.$ti.c.a(A.i([a],p)) +q.a.$1(p)}else p.w$.l(0,a)}, +eI(a){return J.rb(t.eh.a(a),new A.p5(),t.G)}, +$ifN:1} +A.p5.prototype={ +$1(a){t.fw.a(a) +return A.nW(A.te(a.a),a.b,a.c)}, +$S:122} +A.lw.prototype={} +A.a1.prototype={ +j(a){return new A.kg(B.bF).bL(A.i([this],t.pp))}} +A.le.prototype={} +A.lf.prototype={} +A.lg.prototype={} +A.c_.prototype={ +ah(a){return a.fh(this)}, +gq(a){return A.aX(B.bA,this.e,B.u,B.u)}, +v(a,b){if(b==null)return!1 +return b instanceof A.c_&&b.e===this.e}} +A.c0.prototype={ +ah(a){return a.fi(this)}, +gq(a){return A.aX(B.bD,this.e,B.u,B.u)}, +v(a,b){if(b==null)return!1 +return b instanceof A.c0&&b.e===this.e}} +A.bB.prototype={ +ah(a){return a.fj(this)}, +gq(a){return A.aX(B.cH,B.aX.Y(this.e),B.u,B.u)}, +v(a,b){if(b==null)return!1 +return b instanceof A.bB&&B.aX.aI(b.e,this.e)}} +A.bC.prototype={ +ah(a){return a.fk(this)}, +gq(a){return A.aX(B.cI,this.e,this.f,this.r)}, +v(a,b){if(b==null)return!1 +return b instanceof A.bC&&this.e===b.e&&J.N(this.f,b.f)&&this.r==b.r}} +A.bM.prototype={ +ah(a){return a.fl(this)}, +gq(a){return A.aX(B.aT,this.e,B.u,B.u)}, +v(a,b){if(b==null)return!1 +return b instanceof A.bM&&b.e===this.e}} +A.la.prototype={} +A.c2.prototype={ +ah(a){return a.fm(this)}, +gq(a){return A.aX(B.bB,this.f,this.e,B.u)}, +v(a,b){if(b==null)return!1 +return b instanceof A.c2&&b.e===this.e&&b.f===this.f}} +A.bd.prototype={ +ah(a){return a.fo(this)}, +gq(a){return A.aX(B.aT,this.e,this.r,B.aX.Y(this.f))}, +v(a,b){if(b==null)return!1 +return b instanceof A.bd&&b.e===this.e&&b.r===this.r&&B.aX.aI(b.f,this.f)}} +A.ls.prototype={} +A.dI.prototype={ +gR(){var s,r=this,q=r.r +if(q===$){s=r.f.b0(r.e) +r.r!==$&&A.dc() +r.r=s +q=s}return q}, +ah(a){return a.fp(this)}, +gq(a){return A.aX(B.bC,this.gR(),B.u,B.u)}, +v(a,b){if(b==null)return!1 +return b instanceof A.dI&&b.gR()===this.gR()}, +$ih6:1} +A.kh.prototype={ +gF(a){var s=A.i([],t.pp),r=A.i([],t.oi) +return new A.ki($.vf().m(0,this.b),new A.nV(!0,!0,!1,!1,!1,s,r),new A.F("",this.a,0))}} +A.ki.prototype={ +gB(){var s=this.d +s.toString +return s}, +p(){var s,r,q,p,o,n,m=this,l=m.c +if(l!=null){s=m.a.H(l) +if(s instanceof A.T){m.c=s +r=s.e +m.d=r +m.b.lo(r,l.a,l.b,s.b) +return!0}else{r=l.b +q=l.a +if(r"),A.U("/>")],t.ig),A.z3(),r),r,r,q,r,r),new A.oj(),r,r,q,r,r,t.l3)}, +lG(){return A.nr(new A.u(this.glp(),B.h,t.jk),0,9007199254740991,t.fw)}, +lq(){var s=this,r=t.h,q=t.N,p=t.R +return A.dz(A.c5(new A.u(s.gcD(),B.h,r),new A.u(s.gbd(),B.h,r),new A.u(s.glr(),B.h,t.g),q,q,p),new A.o7(s),q,q,p,t.fw)}, +ls(){var s=this.gcE(),r=t.h,q=t.N,p=t.R +return new A.bT(B.Mg,A.nx(A.pU(new A.u(s,B.h,r),A.U("="),new A.u(s,B.h,r),new A.u(this.gc2(),B.h,t.g),q,q,q,p),new A.o3(),q,q,q,p,p),t.bQ)}, +lu(){var s=t.g +return A.cj(A.i([new A.u(this.glv(),B.h,s),new A.u(this.glB(),B.h,s),new A.u(this.glz(),B.h,s)],t.ge),null,t.R)}, +lw(){var s=t.N +return A.dz(A.c5(A.U('"'),new A.eo('"',0),A.U('"'),s,s,s),new A.o4(),s,s,s,t.R)}, +lC(){var s=t.N +return A.dz(A.c5(A.U("'"),new A.eo("'",0),A.U("'"),s,s,s),new A.o6(),s,s,s,t.R)}, +lA(){return A.dt(new A.u(this.gbd(),B.h,t.h),new A.o5(),!1,t.N,t.R)}, +mU(){var s=t.h,r=t.N +return A.nx(A.pU(A.U(""),r,r,r,r),new A.og(),r,r,r,r,t.cW)}, +m4(){var s=A.U("" expected',new A.bj(A.U("-->"),0,9007199254740991,r,t.ln)),A.U("-->"),q,q,q),new A.oa(),q,q,q,t.lY)}, +lS(){var s=A.U("" expected',new A.bj(A.U("]]>"),0,9007199254740991,r,t.ln)),A.U("]]>"),q,q,q),new A.o8(),q,q,q,t.bf)}, +mh(){var s=t.N,r=t.p6 +return A.nx(A.pU(A.U(""),s,r,s,s),new A.ob(),s,r,s,s,t.ee)}, +nR(){var s=A.U("" expected',new A.bj(A.U("?>"),0,9007199254740991,q,t.ln)),p,p),new A.oh(),p,p,p),t.g1),A.U("?>"),p,p,p,p),new A.oi(),p,p,p,p,t.co)}, +mo(){var s=this,r=s.gcD(),q=t.h,p=s.gcE(),o=t.N +return A.wJ(new A.fK(A.U(""),t.i6),new A.of(),o,o,o,t.g0,o,t.jv,o,o,t.dH)}, +mw(){var s=t.by +return A.cj(A.i([new A.u(this.gmz(),B.h,s),new A.u(this.gmx(),B.h,s)],t.jj),null,t.hd)}, +mA(){var s=t.N,r=t.R +return A.dz(A.c5(A.U("SYSTEM"),new A.u(this.gcD(),B.h,t.h),new A.u(this.gc2(),B.h,t.g),s,s,r),new A.od(),s,s,r,t.hd)}, +my(){var s=this.gcD(),r=t.h,q=this.gc2(),p=t.g,o=t.N,n=t.R +return A.rT(A.uL(A.U("PUBLIC"),new A.u(s,B.h,r),new A.u(q,B.h,p),new A.u(s,B.h,r),new A.u(q,B.h,p),o,o,n,o,n),new A.oc(),o,o,n,o,n,t.hd)}, +mC(){var s,r=this,q=A.U("["),p=t.gy +p=A.cj(A.i([new A.u(r.gmr(),B.h,p),new A.u(r.gmp(),B.h,p),new A.u(r.gmt(),B.h,p),new A.u(r.gmE(),B.h,p),new A.u(r.giq(),B.h,t.hN),new A.u(r.ghX(),B.h,t.dE),new A.u(r.gmK(),B.h,p),A.bH(B.W,"input expected",!1)],t.a),null,t.z) +s=t.N +return A.dz(A.c5(q,new A.cp('"]" expected',new A.bj(A.U("]"),0,9007199254740991,p,t.mP)),A.U("]"),s,s,s),new A.oe(),s,s,s,s)}, +ms(){var s=A.U(""),0,9007199254740991,r,t.du),A.U(">"),q,t.ez,q)}, +mq(){var s=A.U(""),0,9007199254740991,r,t.du),A.U(">"),q,t.ez,q)}, +mu(){var s=A.U(""),0,9007199254740991,r,t.du),A.U(">"),q,t.ez,q)}, +mF(){var s=A.U(""),0,9007199254740991,r,t.du),A.U(">"),q,t.ez,q)}, +mL(){var s=t.N +return A.c5(A.U("%"),new A.u(this.gbd(),B.h,t.h),A.U(";"),s,s,s)}, +jo(){var s="whitespace expected" +return A.rU(A.bH(B.cO,s,!1),1,9007199254740991,s)}, +jp(){var s="whitespace expected" +return A.rU(A.bH(B.cO,s,!1),0,9007199254740991,s)}, +ny(){var s=t.h,r=t.N +return new A.cp("name expected",A.uK(new A.u(this.gnw(),B.h,s),A.nr(new A.u(this.gnu(),B.h,s),0,9007199254740991,r),r,t.bF))}, +nx(){return A.uG(":A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd\ud800\udc00-\udb7f\udfff",!1,null,!0)}, +nv(){return A.uG(":A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd\ud800\udc00-\udb7f\udfff-.0-9\xb7\u0300-\u036f\u203f-\u2040",!1,null,!0)}} +A.o9.prototype={ +$1(a){var s=null +return new A.dI(A.q(a),this.a.a,s,s,s,s)}, +$S:97} +A.oj.prototype={ +$5(a,b,c,d,e){var s=null +A.q(a) +A.q(b) +t.p6.a(c) +A.q(d) +return new A.bd(b,c,A.q(e)==="/>",s,s,s,s)}, +$S:98} +A.o7.prototype={ +$3(a,b,c){A.q(a) +A.q(b) +t.R.a(c) +return new A.av(b,this.a.a.b0(c.a),c.b,null)}, +$S:99} +A.o3.prototype={ +$4(a,b,c,d){A.q(a) +A.q(b) +A.q(c) +return t.R.a(d)}, +$S:100} +A.o4.prototype={ +$3(a,b,c){A.q(a) +A.q(b) +A.q(c) +return new A.l(b,B.cG)}, +$S:39} +A.o6.prototype={ +$3(a,b,c){A.q(a) +A.q(b) +A.q(c) +return new A.l(b,B.MI)}, +$S:39} +A.o5.prototype={ +$1(a){return new A.l(A.q(a),B.cG)}, +$S:102} +A.og.prototype={ +$4(a,b,c,d){var s=null +A.q(a) +A.q(b) +A.q(c) +A.q(d) +return new A.bM(b,s,s,s,s)}, +$S:103} +A.oa.prototype={ +$3(a,b,c){var s=null +A.q(a) +A.q(b) +A.q(c) +return new A.c0(b,s,s,s,s)}, +$S:104} +A.o8.prototype={ +$3(a,b,c){var s=null +A.q(a) +A.q(b) +A.q(c) +return new A.c_(b,s,s,s,s)}, +$S:105} +A.ob.prototype={ +$4(a,b,c,d){var s=null +A.q(a) +t.p6.a(b) +A.q(c) +A.q(d) +return new A.bB(b,s,s,s,s)}, +$S:106} +A.oh.prototype={ +$2(a,b){A.q(a) +return A.q(b)}, +$S:107} +A.oi.prototype={ +$4(a,b,c,d){var s=null +A.q(a) +A.q(b) +A.q(c) +A.q(d) +return new A.c2(b,c,s,s,s,s)}, +$S:108} +A.of.prototype={ +$8(a,b,c,d,e,f,g,h){var s=null +A.q(a) +A.q(b) +A.q(c) +t.g0.a(d) +A.q(e) +A.hB(f) +A.q(g) +A.q(h) +return new A.bC(c,d,f,s,s,s,s)}, +$S:109} +A.od.prototype={ +$3(a,b,c){A.q(a) +A.q(b) +t.R.a(c) +return new A.aJ(null,null,c.a,c.b)}, +$S:110} +A.oc.prototype={ +$5(a,b,c,d,e){var s +A.q(a) +A.q(b) +s=t.R +s.a(c) +A.q(d) +s.a(e) +return new A.aJ(c.a,c.b,e.a,e.b)}, +$S:111} +A.oe.prototype={ +$3(a,b,c){A.q(a) +A.q(b) +A.q(c) +return b}, +$S:112} +A.pz.prototype={ +$1(a){return A.zt(new A.u(new A.kj(t.j7.a(a)).gn1(),B.h,t.bj),t.mX)}, +$S:113} +A.dg.prototype={$ifN:1} +A.av.prototype={ +gq(a){return A.aX(this.a,this.b,this.c,B.u)}, +v(a,b){if(b==null)return!1 +return b instanceof A.av&&b.a===this.a&&b.b===this.b&&b.c===this.c}} +A.lb.prototype={} +A.lc.prototype={} +A.h_.prototype={} +A.dH.prototype={ +M(a){return t.mX.a(a).ah(this)}, +fh(a){}, +fi(a){}, +fj(a){}, +fk(a){}, +fl(a){}, +fm(a){}, +fo(a){}, +fp(a){}} +A.pL.prototype={ +$1(a){var s,r=t.av.a(A.up(A.p7(a).data)).c3(0,t.N,t.X),q=r.m(0,"bytes") +if(q!=null)r.k(0,"argument",q) +s=this.a +s.a=s.a.of(new A.pK(this.b,r),t.H)}, +$S:115} +A.pK.prototype={ +$1(a){var s=0,r=A.br(t.H),q=this,p,o +var $async$$1=A.bs(function(b,c){if(b===1)return A.bo(c,r) +for(;;)switch(s){case 0:p=A.p7(v.G.self) +o=B.iq +s=2 +return A.c3(A.pR(q.a,q.b),$async$$1) +case 2:p.postMessage(o.mR(c,null)) +return A.bp(null,r)}}) +return A.bq($async$$1,r)}, +$S:116};(function aliases(){var s=J.cW.prototype +s.jI=s.j +s=A.cJ.prototype +s.jQ=s.h0 +s.jR=s.h8 +s.jS=s.hp +s=A.C.prototype +s.jJ=s.bc +s.jK=s.bb +s=A.h.prototype +s.jH=s.os +s=A.dY.prototype +s.jF=s.l +s.jG=s.a1 +s=A.aa.prototype +s.jN=s.a3 +s=A.b9.prototype +s.jL=s.k +s.bW=s.l +s.fK=s.bx +s.jM=s.a1 +s=A.cb.prototype +s.fI=s.j +s=A.n.prototype +s.bX=s.b8 +s.bE=s.j +s=A.ca.prototype +s.cG=s.j +s=A.au.prototype +s.fJ=s.b8 +s=A.ek.prototype +s.jP=s.ai +s.jO=s.v})();(function installTearOffs(){var s=hunkHelpers._static_2,r=hunkHelpers._instance_1i,q=hunkHelpers.installInstanceTearOff,p=hunkHelpers._static_1,o=hunkHelpers._static_0,n=hunkHelpers._instance_1u,m=hunkHelpers._instance_2u,l=hunkHelpers._instance_0u,k=hunkHelpers.installStaticTearOff +s(J,"ya","vZ",40) +var j +r(j=J.y.prototype,"ghF","l",18) +r(j,"glc","a1",18) +q(J.ct.prototype,"gfF",1,1,null,["$2","$1"],["aa","U"],81,0,0) +p(A,"yF","x4",24) +p(A,"yG","x5",24) +p(A,"yH","x6",24) +o(A,"uh","yy",1) +s(A,"uk","xV",13) +p(A,"ul","xW",14) +s(A,"yK","w4",40) +p(A,"yR","xX",38) +p(A,"yU","zb",14) +s(A,"yT","za",13) +p(A,"yS","wX",33) +n(A.Y.prototype,"got","ou",18) +m(j=A.eQ.prototype,"gar","aI",13) +n(j,"gdM","Y",14) +n(j,"gnj","nk",31) +p(A,"um","a8",20) +p(A,"yO","pJ",20) +p(A,"yP","uy",20) +p(A,"yN","vt",27) +p(A,"yM","vs",26) +n(A.d0.prototype,"gfn","iF",117) +l(j=A.ff.prototype,"gE","mf",0) +l(j,"gmZ","n_",0) +l(j,"gcu","o4",0) +l(j,"glX","lY",0) +l(j,"gdT","nY",0) +l(j,"gbC","jj",0) +l(j,"gnH","nI",0) +l(j,"god","oe",0) +l(j,"gm1","m2",0) +l(j,"giA","oc",0) +l(j,"go2","o3",0) +l(j,"go0","o1",0) +l(j,"gnZ","o_",0) +l(j,"gnW","nX",0) +l(j,"gnU","nV",0) +l(j,"gnS","nT",0) +l(j,"gjh","ji",0) +l(j,"gj2","j3",0) +l(j,"gj0","j1",0) +l(j,"gj6","j7",0) +l(j,"gj4","j5",0) +l(j,"gbf","jg",0) +l(j,"gj9","ja",0) +l(j,"gfu","j8",0) +l(j,"ge4","jf",0) +l(j,"gjd","je",0) +l(j,"gjb","jc",0) +l(j,"giT","iU",0) +l(j,"gbB","j_",0) +l(j,"giX","iY",0) +l(j,"giV","iW",0) +l(j,"ge3","iZ",0) +l(j,"giR","iS",0) +l(j,"gbs","lH",0) +l(j,"gbI","lt",0) +l(j,"gld","le",0) +l(j,"ghP","lI",0) +l(j,"glx","ly",0) +l(j,"glD","lE",0) +l(j,"gdE","lF",0) +l(j,"ghJ","lf",0) +l(j,"gbm","jk",0) +l(j,"geB","lP",0) +l(j,"gno","np",0) +l(j,"gmb","mc",0) +l(j,"gm9","ma",0) +l(j,"gbJ","md",0) +l(j,"ghY","m7",0) +l(j,"ghZ","m8",0) +l(j,"gm5","m6",0) +l(j,"gmM","mN",0) +l(j,"ghQ","lJ",0) +l(j,"geL","mD",0) +l(j,"glg","lh",0) +l(j,"glj","lk",0) +l(j,"gez","lK",0) +l(j,"gmG","mH",0) +l(j,"gmI","mJ",0) +l(j,"ghK","li",0) +l(j,"glM","lN",0) +l(j,"glm","ln",0) +l(j,"geA","lL",0) +l(j,"geM","mO",0) +l(j,"geN","mP",0) +l(j,"ghL","ll",0) +l(j,"gcn","lQ",0) +l(j,"glT","lU",0) +p(A,"uq","yB",15) +p(A,"yY","yw",15) +p(A,"yX","xZ",15) +l(j=A.kj.prototype,"gn1","n2",82) +l(j,"glV","lW",83) +l(j,"gjq","jr",84) +l(j,"gaZ","lG",85) +l(j,"glp","lq",86) +l(j,"glr","ls",7) +l(j,"gc2","lu",7) +l(j,"glv","lw",7) +l(j,"glB","lC",7) +l(j,"glz","lA",7) +l(j,"gmT","mU",88) +l(j,"ghX","m4",89) +l(j,"glR","lS",90) +l(j,"gmg","mh",91) +l(j,"giq","nR",92) +l(j,"gmn","mo",93) +l(j,"gmv","mw",23) +l(j,"gmz","mA",23) +l(j,"gmx","my",23) +l(j,"gmB","mC",6) +l(j,"gmr","ms",11) +l(j,"gmp","mq",11) +l(j,"gmt","mu",11) +l(j,"gmE","mF",11) +l(j,"gmK","mL",11) +l(j,"gcD","jo",6) +l(j,"gcE","jp",6) +l(j,"gbd","ny",6) +l(j,"gnw","nx",6) +l(j,"gnu","nv",6) +n(A.dH.prototype,"giE","M",114) +k(A,"zm",2,null,["$1$2","$2"],["uB",function(a,b){return A.uB(a,b,t.cZ)}],121,1) +s(A,"z3","zv",22) +s(A,"z4","zw",22) +s(A,"z2","zu",22)})();(function inheritance(){var s=hunkHelpers.mixin,r=hunkHelpers.inherit,q=hunkHelpers.inheritMany +r(A.p,null) +q(A.p,[A.q4,J.iS,A.fF,J.J,A.h,A.eN,A.a9,A.b7,A.a0,A.C,A.nK,A.M,A.du,A.cF,A.fd,A.fT,A.fO,A.eX,A.bZ,A.ak,A.bL,A.cf,A.bn,A.ea,A.dW,A.cK,A.aY,A.fj,A.nQ,A.jl,A.fc,A.hq,A.oW,A.mM,A.cv,A.dr,A.fn,A.cV,A.hg,A.et,A.fS,A.kV,A.kB,A.p0,A.bU,A.kO,A.kX,A.oY,A.kx,A.bG,A.kC,A.dJ,A.aB,A.ky,A.kT,A.hz,A.hd,A.kP,A.dL,A.hv,A.hf,A.bt,A.cl,A.oy,A.oS,A.kZ,A.aq,A.dh,A.oE,A.jp,A.fQ,A.kM,A.aC,A.iR,A.b0,A.aK,A.kW,A.jJ,A.Y,A.hw,A.nS,A.bN,A.jk,A.ie,A.bQ,A.lJ,A.lH,A.ot,A.or,A.fe,A.kv,A.os,A.mD,A.oq,A.mH,A.lG,A.nm,A.nl,A.jv,A.ju,A.fA,A.nk,A.iO,A.jq,A.fR,A.cP,A.lI,A.eR,A.e2,A.cX,A.bE,A.ey,A.e9,A.eQ,A.ev,A.kR,A.I,A.nO,A.eb,A.j5,A.ns,A.R,A.k7,A.ip,A.eY,A.dj,A.bu,A.ih,A.f3,A.f2,A.cm,A.f4,A.il,A.f5,A.cS,A.cn,A.f6,A.im,A.f7,A.co,A.f8,A.ii,A.eZ,A.ij,A.dk,A.ik,A.f_,A.dl,A.f0,A.f1,A.cR,A.io,A.iq,A.fa,A.ig,A.aO,A.kQ,A.oU,A.kI,A.am,A.mB,A.aa,A.bb,A.nB,A.lS,A.lN,A.ew,A.mA,A.bl,A.jS,A.ff,A.nP,A.lV,A.f9,A.lO,A.nM,A.ni,A.jt,A.cb,A.js,A.n,A.cB,A.fs,A.ca,A.jN,A.jP,A.ek,A.me,A.aL,A.bD,A.bW,A.aJ,A.d5,A.kk,A.kl,A.ke,A.nX,A.ep,A.nY,A.d6,A.cG,A.aS,A.Z,A.op,A.aH,A.kn,A.ll,A.ka,A.lh,A.ks,A.lu,A.nV,A.ok,A.ol,A.km,A.lv,A.lw,A.le,A.ki,A.kj,A.dg,A.lb,A.h_,A.dH]) +q(J.iS,[J.iV,J.e4,J.fk,J.e6,J.e7,J.e5,J.ct]) +q(J.fk,[J.cW,J.y,A.dv,A.fu]) +q(J.cW,[J.jA,J.dF,J.cu]) +r(J.iU,A.fF) +r(J.mJ,J.y) +q(J.e5,[J.fi,J.iW]) +q(A.h,[A.eu,A.z,A.ba,A.b_,A.dn,A.dE,A.cx,A.O,A.he,A.kw,A.kU,A.bV,A.hQ,A.d3,A.kN,A.fr,A.c1,A.kh]) +r(A.de,A.eu) +r(A.hb,A.de) +q(A.a9,[A.df,A.bx,A.cJ]) +q(A.b7,[A.i5,A.iP,A.i4,A.jT,A.pF,A.pH,A.ov,A.ou,A.p9,A.oN,A.oD,A.oB,A.pS,A.pT,A.px,A.mI,A.ma,A.mc,A.lM,A.lL,A.n0,A.n1,A.n2,A.n3,A.n4,A.n5,A.mQ,A.mR,A.mS,A.mU,A.mW,A.mV,A.mX,A.mZ,A.mY,A.n_,A.n8,A.n9,A.na,A.nb,A.nc,A.nd,A.ne,A.nf,A.ng,A.nh,A.nD,A.nE,A.nF,A.lU,A.lT,A.md,A.mG,A.nI,A.nJ,A.nH,A.nG,A.pn,A.po,A.pl,A.pm,A.lX,A.m4,A.m2,A.m3,A.lY,A.lZ,A.m_,A.m0,A.m7,A.m8,A.m5,A.m6,A.lP,A.lQ,A.pg,A.pQ,A.pc,A.pd,A.pY,A.pP,A.nv,A.nw,A.ny,A.nz,A.nA,A.pW,A.pX,A.mg,A.mf,A.mh,A.mj,A.ml,A.mi,A.mz,A.p8,A.on,A.oo,A.nZ,A.o0,A.o1,A.o2,A.ps,A.pt,A.pu,A.pv,A.pw,A.om,A.p5,A.o9,A.oj,A.o7,A.o3,A.o4,A.o6,A.o5,A.og,A.oa,A.o8,A.ob,A.oi,A.of,A.od,A.oc,A.oe,A.pz,A.pL,A.pK]) +q(A.i5,[A.lK,A.nt,A.mK,A.pG,A.pa,A.ph,A.oO,A.mN,A.mO,A.oT,A.oA,A.n7,A.nU,A.lR,A.nq,A.mF,A.pB,A.pk,A.pp,A.pq,A.pr,A.lW,A.pN,A.pO,A.mk,A.oh]) +q(A.a0,[A.e8,A.jF,A.cC,A.iX,A.k0,A.jK,A.kL,A.fl,A.hU,A.bR,A.jh,A.fX,A.fW,A.dD,A.i7]) +q(A.C,[A.em,A.b9]) +q(A.em,[A.ah,A.cE]) +q(A.z,[A.G,A.eW,A.aV,A.fo,A.dq,A.hc]) +q(A.G,[A.cy,A.Q,A.X,A.fp]) +r(A.eU,A.ba) +r(A.eV,A.dE) +r(A.dZ,A.cx) +q(A.bn,[A.ez,A.eA,A.d7]) +r(A.l,A.ez) +r(A.hl,A.eA) +q(A.d7,[A.hm,A.hn,A.ho]) +r(A.eC,A.ea) +r(A.dG,A.eC) +r(A.eP,A.dG) +q(A.dW,[A.r,A.a]) +q(A.aY,[A.dX,A.hp,A.kD]) +q(A.dX,[A.b8,A.aP]) +r(A.e0,A.iP) +r(A.fx,A.cC) +q(A.jT,[A.jR,A.dT]) +r(A.dp,A.bx) +q(A.fu,[A.j7,A.aW]) +q(A.aW,[A.hh,A.hj]) +r(A.hi,A.hh) +r(A.ft,A.hi) +r(A.hk,A.hj) +r(A.by,A.hk) +q(A.ft,[A.j8,A.j9]) +q(A.by,[A.ja,A.jb,A.jc,A.jd,A.fv,A.fw,A.dw]) +r(A.eB,A.kL) +q(A.i4,[A.ow,A.ox,A.oZ,A.oF,A.oJ,A.oI,A.oH,A.oG,A.oM,A.oL,A.oK,A.oX,A.pf,A.p3,A.p2,A.mb,A.np,A.mE,A.mC,A.pj,A.m1,A.my,A.mm,A.mt,A.mu,A.mv,A.mw,A.mr,A.ms,A.mn,A.mo,A.mp,A.mq,A.mx,A.oP]) +r(A.h8,A.kC) +r(A.kS,A.hz) +q(A.cJ,[A.dK,A.ha]) +r(A.cL,A.hp) +q(A.bt,[A.ic,A.eL,A.iY]) +q(A.ic,[A.hS,A.k4]) +q(A.cl,[A.kY,A.hX,A.j_,A.k5,A.kg]) +r(A.hT,A.kY) +r(A.iZ,A.fl) +r(A.oR,A.oS) +q(A.bR,[A.ef,A.fh]) +r(A.kE,A.hw) +q(A.oE,[A.dV,A.h7,A.i0,A.ec,A.aT,A.cT,A.ir,A.ag,A.bm]) +q(A.fe,[A.ku,A.it]) +r(A.p6,A.oq) +q(A.nm,[A.no,A.fz]) +r(A.nn,A.nl) +r(A.jx,A.ju) +r(A.jy,A.jx) +r(A.jw,A.jv) +r(A.nj,A.nk) +r(A.e_,A.iO) +r(A.fy,A.jq) +r(A.ei,A.bE) +r(A.dY,A.ev) +r(A.iz,A.I) +r(A.jX,A.nO) +q(A.R,[A.cs,A.d4,A.jV,A.je,A.jL,A.d_,A.fL,A.bc,A.eh,A.ao]) +q(A.bc,[A.di,A.j6,A.hW,A.iy,A.i3,A.ed,A.ee,A.jf]) +r(A.fD,A.ed) +r(A.jE,A.ee) +q(A.ao,[A.jo,A.jn,A.al]) +q(A.al,[A.jm,A.bA,A.jz,A.ib,A.is,A.iv]) +q(A.bA,[A.j0,A.hN,A.jW,A.iw,A.jI,A.i1,A.jG,A.j1,A.k6]) +q(A.dj,[A.bg,A.fb]) +q(A.am,[A.kF,A.i9,A.bY,A.kJ,A.i6]) +r(A.kG,A.kF) +r(A.kH,A.kG) +r(A.eT,A.kH) +r(A.kK,A.kJ) +r(A.K,A.kK) +q(A.b9,[A.ji,A.hH]) +r(A.iu,A.kN) +q(A.aa,[A.iN,A.hZ,A.hY,A.iG,A.hM,A.iA,A.jU,A.iL,A.fg,A.iB,A.iD,A.iK,A.iH,A.iC,A.iJ,A.iI,A.iE,A.hK,A.iF,A.hL,A.hI,A.hJ]) +r(A.ia,A.kD) +r(A.d0,A.k7) +q(A.bl,[A.cA,A.bK,A.eS]) +q(A.cA,[A.d2,A.H]) +q(A.bK,[A.j,A.D,A.dC,A.dU]) +r(A.e1,A.nM) +q(A.e1,[A.jB,A.k3,A.k9]) +r(A.eg,A.cb) +q(A.eg,[A.T,A.F]) +q(A.n,[A.u,A.au,A.ds,A.fH,A.dB,A.fI,A.fJ,A.fK,A.id,A.cQ,A.jg,A.i2,A.fC,A.jH,A.eo]) +q(A.au,[A.cp,A.fq,A.fU,A.bT,A.fP,A.dA]) +q(A.ca,[A.fM,A.ck,A.j4,A.jj,A.ab,A.k8]) +r(A.eO,A.ds) +q(A.i2,[A.ej,A.fV]) +r(A.hO,A.ej) +r(A.hP,A.fV) +q(A.dA,[A.fm,A.fB]) +r(A.bj,A.fm) +r(A.bh,A.jP) +q(A.ek,[A.aw,A.jQ]) +r(A.cd,A.jQ) +r(A.kd,A.d5) +q(A.kk,[A.ko,A.lr,A.lt,A.h2]) +r(A.kq,A.lr) +r(A.kr,A.lt) +r(A.lm,A.ll) +r(A.ln,A.lm) +r(A.lo,A.ln) +r(A.lp,A.lo) +r(A.lq,A.lp) +r(A.E,A.lq) +q(A.E,[A.l_,A.l1,A.l2,A.l4,A.l5,A.l6]) +r(A.l0,A.l_) +r(A.aR,A.l0) +r(A.kb,A.l1) +q(A.kb,[A.en,A.fY,A.h4,A.es]) +r(A.l3,A.l2) +r(A.kc,A.l3) +r(A.fZ,A.l4) +r(A.kf,A.l5) +r(A.l7,A.l6) +r(A.l8,A.l7) +r(A.l9,A.l8) +r(A.aG,A.l9) +r(A.li,A.lh) +r(A.lj,A.li) +r(A.eq,A.lj) +r(A.h0,A.dY) +q(A.eq,[A.h3,A.h5]) +r(A.kt,A.lu) +r(A.ld,A.lv) +r(A.lk,A.lw) +r(A.lf,A.le) +r(A.lg,A.lf) +r(A.a1,A.lg) +q(A.a1,[A.c_,A.c0,A.bB,A.bC,A.la,A.c2,A.ls,A.dI]) +r(A.bM,A.la) +r(A.bd,A.ls) +r(A.lc,A.lb) +r(A.av,A.lc) +s(A.em,A.bL) +s(A.hh,A.C) +s(A.hi,A.ak) +s(A.hj,A.C) +s(A.hk,A.ak) +s(A.eC,A.hv) +s(A.kF,A.kQ) +s(A.kG,A.oU) +s(A.kH,A.kI) +s(A.kJ,A.kQ) +s(A.kK,A.kI) +s(A.kN,A.C) +s(A.lr,A.kl) +s(A.lt,A.kl) +s(A.l_,A.cG) +s(A.l0,A.Z) +s(A.l1,A.Z) +s(A.l2,A.Z) +s(A.l3,A.ep) +s(A.l4,A.Z) +s(A.l5,A.d6) +s(A.l6,A.cG) +s(A.l7,A.Z) +s(A.l8,A.ep) +s(A.l9,A.d6) +s(A.ll,A.nX) +s(A.lm,A.nY) +s(A.ln,A.aH) +s(A.lo,A.kn) +s(A.lp,A.aS) +s(A.lq,A.op) +s(A.lh,A.aH) +s(A.li,A.kn) +s(A.lj,A.Z) +s(A.lu,A.ks) +s(A.lv,A.dH) +s(A.lw,A.dH) +s(A.le,A.km) +s(A.lf,A.ol) +s(A.lg,A.ok) +s(A.la,A.h_) +s(A.ls,A.h_) +s(A.lb,A.h_) +s(A.lc,A.km)})() +var v={G:typeof self!="undefined"?self:globalThis,typeUniverse:{eC:new Map(),tR:{},eT:{},tPV:{},sEA:[]},mangledGlobalNames:{b:"int",V:"double",b5:"num",e:"String",A:"bool",aK:"Null",m:"List",p:"Object",d:"Map",ap:"JSObject"},mangledNames:{},types:["A()","~()","~(aG)","aK()","A(e)","A(aG?)","n()","n<+(e,ag)>()","e()","A(bQ)","A(cG)","n<@>()","A(dk)","A(p?,p?)","b(p?)","e(cc)","~(@)","~(p,e)","~(p?)","b(b,d)","A(e?)","A(aL)","F(F,F)","n()","~(~())","@()","b(b)","A(b)","aK(@)","A(E)","A(am)","A(p?)","A(bu)","e(e)","b()","aR(aR)","E(E)","e(b)","@(@)","+(e,ag)(e,e,e)","b(@,@)","~(p?,p?)","~(el,@)","~(e,p?)","e(K)","A(K)","aK(@,d1)","A(d)","e(d)","~(e,d)","~(am,d)","A(cR)","~(bu)","d(bu)","~(b,@)","m>(m)","e(cS)","A(b0)","bg(b0)","aK(p,d1)","e(e?)","m(e)","ab(e)","ab(e,e,e)","~(e,@)","ab(b)","b(ab,ab)","b(b,ab)","e?()","b(bD)","e?(dl)","p(bD)","p(aL)","b(aL,aL)","m(b0>)","~(@,@)","cd()","e?(E)","aK(~())","cm(aG)","cn(aG)","A(dx[b])","n()","n
()","n()","n>()","n()","b(b,b)","n()","n()","n()","n()","n()","n()","@(@,e)","@(e)","~(K)","dI(e)","bd(e,e,m,e,e)","av(e,e,+(e,ag))","+(e,ag)(e,e,e,+(e,ag))","e(bK)","+(e,ag)(e)","bM(e,e,e,e)","c0(e,e,e)","c_(e,e,e)","bB(e,m,e,e)","e(e,e)","c2(e,e,e,e)","bC(e,e,e,aJ?,e,e?,e,e)","aJ(e,e,+(e,ag))","aJ(e,e,+(e,ag),e,+(e,ag))","e(e,e,e)","n(d5)","~(a1)","aK(ap)","cr<~>(~)","A(d_)","0&(e,b?)","p?(p?)","e(m)","0^(0^,0^)","aR(av)"],interceptorsByTag:null,leafTags:null,arrayRti:Symbol("$ti"),rttc:{"2;":(a,b)=>c=>c instanceof A.l&&a.b(c.a)&&b.b(c.b),"3;":(a,b,c)=>d=>d instanceof A.hl&&a.b(d.a)&&b.b(d.b)&&c.b(d.c),"4;":a=>b=>b instanceof A.hm&&A.r_(a,b.a),"5;":a=>b=>b instanceof A.hn&&A.r_(a,b.a),"8;":a=>b=>b instanceof A.ho&&A.r_(a,b.a)}} +A.xy(v.typeUniverse,JSON.parse('{"cu":"cW","jA":"cW","dF":"cW","zO":"dv","iV":{"A":[],"a3":[]},"e4":{"aK":[],"a3":[]},"fk":{"ap":[]},"cW":{"ap":[]},"y":{"m":["1"],"z":["1"],"ap":[],"h":["1"],"aU":["1"]},"iU":{"fF":[]},"mJ":{"y":["1"],"m":["1"],"z":["1"],"ap":[],"h":["1"],"aU":["1"]},"J":{"L":["1"]},"e5":{"V":[],"b5":[],"a6":["b5"]},"fi":{"V":[],"b":[],"b5":[],"a6":["b5"],"a3":[]},"iW":{"V":[],"b5":[],"a6":["b5"],"a3":[]},"ct":{"e":[],"a6":["e"],"dx":[],"aU":["@"],"a3":[]},"eu":{"h":["2"]},"eN":{"L":["2"]},"de":{"eu":["1","2"],"h":["2"],"h.E":"2"},"hb":{"de":["1","2"],"eu":["1","2"],"z":["2"],"h":["2"],"h.E":"2"},"df":{"a9":["3","4"],"d":["3","4"],"a9.K":"3","a9.V":"4"},"e8":{"a0":[]},"jF":{"a0":[]},"ah":{"C":["b"],"bL":["b"],"m":["b"],"z":["b"],"h":["b"],"C.E":"b","bL.E":"b"},"z":{"h":["1"]},"G":{"z":["1"],"h":["1"]},"cy":{"G":["1"],"z":["1"],"h":["1"],"h.E":"1","G.E":"1"},"M":{"L":["1"]},"ba":{"h":["2"],"h.E":"2"},"eU":{"ba":["1","2"],"z":["2"],"h":["2"],"h.E":"2"},"du":{"L":["2"]},"Q":{"G":["2"],"z":["2"],"h":["2"],"h.E":"2","G.E":"2"},"b_":{"h":["1"],"h.E":"1"},"cF":{"L":["1"]},"dn":{"h":["2"],"h.E":"2"},"fd":{"L":["2"]},"dE":{"h":["1"],"h.E":"1"},"eV":{"dE":["1"],"z":["1"],"h":["1"],"h.E":"1"},"fT":{"L":["1"]},"cx":{"h":["1"],"h.E":"1"},"dZ":{"cx":["1"],"z":["1"],"h":["1"],"h.E":"1"},"fO":{"L":["1"]},"eW":{"z":["1"],"h":["1"],"h.E":"1"},"eX":{"L":["1"]},"O":{"h":["1"],"h.E":"1"},"bZ":{"L":["1"]},"em":{"C":["1"],"bL":["1"],"m":["1"],"z":["1"],"h":["1"]},"X":{"G":["1"],"z":["1"],"h":["1"],"h.E":"1","G.E":"1"},"cf":{"el":[]},"l":{"ez":[],"bn":[]},"hl":{"eA":[],"bn":[]},"hm":{"d7":[],"bn":[]},"hn":{"d7":[],"bn":[]},"ho":{"d7":[],"bn":[]},"eP":{"dG":["1","2"],"eC":["1","2"],"ea":["1","2"],"hv":["1","2"],"d":["1","2"]},"dW":{"d":["1","2"]},"r":{"dW":["1","2"],"d":["1","2"]},"he":{"h":["1"],"h.E":"1"},"cK":{"L":["1"]},"a":{"dW":["1","2"],"d":["1","2"]},"dX":{"aY":["1"],"bk":["1"],"z":["1"],"h":["1"]},"b8":{"dX":["1"],"aY":["1"],"bk":["1"],"z":["1"],"h":["1"],"aY.E":"1"},"aP":{"dX":["1"],"aY":["1"],"bk":["1"],"z":["1"],"h":["1"],"aY.E":"1"},"iP":{"b7":[],"cq":[]},"e0":{"b7":[],"cq":[]},"fj":{"rs":[]},"fx":{"cC":[],"a0":[]},"iX":{"a0":[]},"k0":{"a0":[]},"jl":{"aj":[]},"hq":{"d1":[]},"b7":{"cq":[]},"i4":{"b7":[],"cq":[]},"i5":{"b7":[],"cq":[]},"jT":{"b7":[],"cq":[]},"jR":{"b7":[],"cq":[]},"dT":{"b7":[],"cq":[]},"jK":{"a0":[]},"bx":{"a9":["1","2"],"mL":["1","2"],"d":["1","2"],"a9.K":"1","a9.V":"2"},"aV":{"z":["1"],"h":["1"],"h.E":"1"},"cv":{"L":["1"]},"fo":{"z":["1"],"h":["1"],"h.E":"1"},"dr":{"L":["1"]},"dq":{"z":["b0<1,2>"],"h":["b0<1,2>"],"h.E":"b0<1,2>"},"fn":{"L":["b0<1,2>"]},"dp":{"bx":["1","2"],"a9":["1","2"],"mL":["1","2"],"d":["1","2"],"a9.K":"1","a9.V":"2"},"ez":{"bn":[]},"eA":{"bn":[]},"d7":{"bn":[]},"cV":{"qg":[],"dx":[]},"hg":{"fE":[],"cc":[]},"kw":{"h":["fE"],"h.E":"fE"},"et":{"L":["fE"]},"fS":{"cc":[]},"kU":{"h":["cc"],"h.E":"cc"},"kV":{"L":["cc"]},"dv":{"ap":[],"a3":[]},"fu":{"ap":[]},"j7":{"ap":[],"a3":[]},"aW":{"bw":["1"],"ap":[],"aU":["1"]},"ft":{"C":["V"],"aW":["V"],"m":["V"],"bw":["V"],"z":["V"],"ap":[],"aU":["V"],"h":["V"],"ak":["V"]},"by":{"C":["b"],"aW":["b"],"m":["b"],"bw":["b"],"z":["b"],"ap":[],"aU":["b"],"h":["b"],"ak":["b"]},"j8":{"C":["V"],"aW":["V"],"m":["V"],"bw":["V"],"z":["V"],"ap":[],"aU":["V"],"h":["V"],"ak":["V"],"a3":[],"C.E":"V","ak.E":"V"},"j9":{"C":["V"],"aW":["V"],"m":["V"],"bw":["V"],"z":["V"],"ap":[],"aU":["V"],"h":["V"],"ak":["V"],"a3":[],"C.E":"V","ak.E":"V"},"ja":{"by":[],"C":["b"],"aW":["b"],"m":["b"],"bw":["b"],"z":["b"],"ap":[],"aU":["b"],"h":["b"],"ak":["b"],"a3":[],"C.E":"b","ak.E":"b"},"jb":{"by":[],"iQ":[],"C":["b"],"aW":["b"],"m":["b"],"bw":["b"],"z":["b"],"ap":[],"aU":["b"],"h":["b"],"ak":["b"],"a3":[],"C.E":"b","ak.E":"b"},"jc":{"by":[],"C":["b"],"aW":["b"],"m":["b"],"bw":["b"],"z":["b"],"ap":[],"aU":["b"],"h":["b"],"ak":["b"],"a3":[],"C.E":"b","ak.E":"b"},"jd":{"by":[],"qn":[],"C":["b"],"aW":["b"],"m":["b"],"bw":["b"],"z":["b"],"ap":[],"aU":["b"],"h":["b"],"ak":["b"],"a3":[],"C.E":"b","ak.E":"b"},"fv":{"by":[],"qo":[],"C":["b"],"aW":["b"],"m":["b"],"bw":["b"],"z":["b"],"ap":[],"aU":["b"],"h":["b"],"ak":["b"],"a3":[],"C.E":"b","ak.E":"b"},"fw":{"by":[],"C":["b"],"aW":["b"],"m":["b"],"bw":["b"],"z":["b"],"ap":[],"aU":["b"],"h":["b"],"ak":["b"],"a3":[],"C.E":"b","ak.E":"b"},"dw":{"by":[],"jZ":[],"C":["b"],"aW":["b"],"m":["b"],"bw":["b"],"z":["b"],"ap":[],"aU":["b"],"h":["b"],"ak":["b"],"a3":[],"C.E":"b","ak.E":"b"},"kL":{"a0":[]},"eB":{"cC":[],"a0":[]},"bG":{"a0":[]},"h8":{"kC":["1"]},"aB":{"cr":["1"]},"hz":{"tj":[]},"kS":{"hz":[],"tj":[]},"cJ":{"a9":["1","2"],"d":["1","2"],"a9.K":"1","a9.V":"2"},"dK":{"cJ":["1","2"],"a9":["1","2"],"d":["1","2"],"a9.K":"1","a9.V":"2"},"ha":{"cJ":["1","2"],"a9":["1","2"],"d":["1","2"],"a9.K":"1","a9.V":"2"},"hc":{"z":["1"],"h":["1"],"h.E":"1"},"hd":{"L":["1"]},"cL":{"hp":["1"],"aY":["1"],"rB":["1"],"bk":["1"],"z":["1"],"h":["1"],"aY.E":"1"},"dL":{"L":["1"]},"cE":{"C":["1"],"bL":["1"],"m":["1"],"z":["1"],"h":["1"],"C.E":"1","bL.E":"1"},"C":{"m":["1"],"z":["1"],"h":["1"]},"a9":{"d":["1","2"]},"ea":{"d":["1","2"]},"dG":{"eC":["1","2"],"ea":["1","2"],"hv":["1","2"],"d":["1","2"]},"fp":{"wH":["1"],"G":["1"],"z":["1"],"h":["1"],"h.E":"1","G.E":"1"},"hf":{"L":["1"]},"aY":{"bk":["1"],"z":["1"],"h":["1"]},"hp":{"aY":["1"],"bk":["1"],"z":["1"],"h":["1"]},"hS":{"bt":["e","m"],"bt.S":"e"},"kY":{"cl":["m","e"]},"hT":{"cl":["m","e"]},"eL":{"bt":["m","e"],"bt.S":"m"},"hX":{"cl":["m","e"]},"ic":{"bt":["e","m"]},"fl":{"a0":[]},"iZ":{"a0":[]},"iY":{"bt":["p?","e"],"bt.S":"p?"},"j_":{"cl":["p?","e"]},"k4":{"bt":["e","m"],"bt.S":"e"},"k5":{"cl":["m","e"]},"i_":{"a6":["i_"]},"dh":{"a6":["dh"]},"V":{"b5":[],"a6":["b5"]},"b":{"b5":[],"a6":["b5"]},"m":{"z":["1"],"h":["1"]},"b5":{"a6":["b5"]},"qg":{"dx":[]},"fE":{"cc":[]},"bk":{"z":["1"],"h":["1"]},"e":{"a6":["e"],"dx":[]},"aq":{"i_":[],"a6":["i_"]},"hU":{"a0":[]},"cC":{"a0":[]},"bR":{"a0":[]},"ef":{"a0":[]},"fh":{"a0":[]},"jh":{"a0":[]},"fX":{"a0":[]},"fW":{"a0":[]},"dD":{"a0":[]},"i7":{"a0":[]},"jp":{"a0":[]},"fQ":{"a0":[]},"kM":{"aj":[]},"aC":{"aj":[]},"iR":{"aj":[],"a0":[]},"kW":{"d1":[]},"bV":{"h":["b"],"h.E":"b"},"jJ":{"L":["b"]},"Y":{"wP":[]},"hw":{"k1":[]},"bN":{"k1":[]},"kE":{"k1":[]},"jk":{"aj":[]},"vU":{"m":["b"],"z":["b"],"h":["b"]},"jZ":{"m":["b"],"z":["b"],"h":["b"]},"wT":{"m":["b"],"z":["b"],"h":["b"]},"vT":{"m":["b"],"z":["b"],"h":["b"]},"qn":{"m":["b"],"z":["b"],"h":["b"]},"iQ":{"m":["b"],"z":["b"],"h":["b"]},"qo":{"m":["b"],"z":["b"],"h":["b"]},"vM":{"m":["V"],"z":["V"],"h":["V"]},"vN":{"m":["V"],"z":["V"],"h":["V"]},"hQ":{"h":["bQ"],"h.E":"bQ"},"ku":{"fe":[]},"jv":{"rK":[]},"ju":{"qe":[]},"jx":{"qe":[]},"jy":{"qe":[]},"jw":{"rK":[]},"it":{"fe":[]},"e_":{"iO":[]},"fy":{"jq":[]},"d3":{"h":["e"],"h.E":"e"},"fR":{"L":["e"]},"eR":{"bS":["1"]},"e2":{"bS":["h<1>"]},"cX":{"bS":["m<1>"]},"bE":{"bS":["2"]},"ei":{"bE":["1","bk<1>"],"bS":["bk<1>"],"bE.E":"1","bE.T":"bk<1>"},"e9":{"bS":["d<1,2>"]},"eQ":{"bS":["@"]},"ev":{"h":["1"]},"dY":{"m":["1"],"ev":["1"],"z":["1"],"h":["1"]},"iz":{"I":[]},"d_":{"R":[]},"fL":{"R":[]},"ao":{"R":[]},"cs":{"R":[]},"d4":{"R":[]},"jV":{"R":[]},"je":{"R":[]},"jL":{"R":[]},"bc":{"R":[]},"di":{"bc":[],"R":[]},"j6":{"bc":[],"R":[]},"hW":{"bc":[],"R":[]},"iy":{"bc":[],"R":[]},"i3":{"bc":[],"R":[]},"ed":{"bc":[],"R":[]},"ee":{"bc":[],"R":[]},"fD":{"ed":[],"bc":[],"R":[]},"jE":{"ee":[],"bc":[],"R":[]},"eh":{"R":[]},"jf":{"bc":[],"R":[]},"jo":{"ao":[],"R":[]},"jn":{"ao":[],"R":[]},"al":{"ao":[],"R":[]},"jm":{"al":[],"ao":[],"R":[]},"bA":{"al":[],"ao":[],"R":[]},"j0":{"bA":[],"al":[],"ao":[],"R":[]},"jz":{"al":[],"ao":[],"R":[]},"ib":{"al":[],"ao":[],"R":[]},"is":{"al":[],"ao":[],"R":[]},"hN":{"bA":[],"al":[],"ao":[],"R":[]},"jW":{"bA":[],"al":[],"ao":[],"R":[]},"iw":{"bA":[],"al":[],"ao":[],"R":[]},"iv":{"al":[],"ao":[],"R":[]},"jI":{"bA":[],"al":[],"ao":[],"R":[]},"i1":{"bA":[],"al":[],"ao":[],"R":[]},"jG":{"bA":[],"al":[],"ao":[],"R":[]},"j1":{"bA":[],"al":[],"ao":[],"R":[]},"k6":{"bA":[],"al":[],"ao":[],"R":[]},"k7":{"ta":[]},"bg":{"dj":[]},"fb":{"dj":[]},"aO":{"a6":["p"]},"eT":{"am":[]},"K":{"am":[]},"i9":{"am":[]},"bY":{"am":[]},"i6":{"am":[]},"ji":{"b9":["am"],"C":["am"],"m":["am"],"z":["am"],"h":["am"],"C.E":"am","b9.E":"am"},"iu":{"C":["K"],"m":["K"],"z":["K"],"h":["K"],"C.E":"K","h.E":"K"},"bb":{"aj":[]},"iN":{"aa":[]},"hZ":{"aa":[]},"hY":{"aa":[]},"iG":{"aa":[]},"hM":{"aa":[]},"iA":{"aa":[]},"jU":{"aa":[]},"iL":{"aa":[]},"fg":{"aa":[]},"iB":{"aa":[]},"iD":{"aa":[]},"iK":{"aa":[]},"iH":{"aa":[]},"iC":{"aa":[]},"iJ":{"aa":[]},"iI":{"aa":[]},"iE":{"aa":[]},"hK":{"aa":[]},"iF":{"aa":[]},"hL":{"aa":[]},"hI":{"aa":[]},"hJ":{"aa":[]},"ia":{"aY":["e"],"bk":["e"],"z":["e"],"h":["e"],"aY.E":"e"},"kD":{"aY":["e"],"bk":["e"],"z":["e"],"h":["e"]},"ew":{"aj":[]},"b9":{"C":["1"],"m":["1"],"z":["1"],"h":["1"]},"d0":{"ta":[]},"bK":{"bl":[]},"cA":{"bl":[]},"d2":{"cA":[],"bl":[]},"H":{"cA":[],"bl":[]},"j":{"bK":[],"bl":[]},"D":{"bK":[],"bl":[]},"dC":{"bK":[],"bl":[]},"dU":{"bK":[],"bl":[]},"eS":{"bl":[]},"ff":{"L":["bl"]},"hH":{"b9":["K?"],"C":["K?"],"m":["K?"],"z":["K?"],"h":["K?"],"C.E":"K?","b9.E":"K?"},"f9":{"aj":[]},"jt":{"aj":[]},"jB":{"e1":[]},"k3":{"e1":[]},"k9":{"e1":[]},"js":{"aC":[],"aj":[]},"F":{"eg":["0&"],"cb":[]},"eg":{"cb":[]},"T":{"eg":["1"],"cb":[]},"u":{"nC":["1"],"n":["1"]},"fr":{"h":["1"],"h.E":"1"},"fs":{"L":["1"]},"cp":{"au":["~","e"],"n":["e"],"au.T":"~"},"fq":{"au":["1","2"],"n":["2"],"au.T":"1"},"fU":{"au":["1","cB<1>"],"n":["cB<1>"],"au.T":"1"},"fM":{"ca":[]},"ck":{"ca":[]},"j4":{"ca":[]},"jj":{"ca":[]},"ab":{"ca":[]},"k8":{"ca":[]},"eO":{"ds":["1","1"],"n":["1"],"ds.R":"1"},"au":{"n":["2"]},"fH":{"n":["+(1,2)"]},"dB":{"n":["+(1,2,3)"]},"fI":{"n":["+(1,2,3,4)"]},"fJ":{"n":["+(1,2,3,4,5)"]},"fK":{"n":["+(1,2,3,4,5,6,7,8)"]},"ds":{"n":["2"]},"bT":{"au":["1","1"],"n":["1"],"au.T":"1"},"fP":{"au":["1","1"],"n":["1"],"au.T":"1"},"id":{"n":["~"]},"cQ":{"n":["1"]},"jg":{"n":["e"]},"i2":{"n":["e"]},"fC":{"n":["e"]},"ej":{"n":["e"]},"hO":{"n":["e"]},"fV":{"n":["e"]},"hP":{"n":["e"]},"jH":{"n":["e"]},"bj":{"fm":["1"],"dA":["1","m<1>"],"au":["1","m<1>"],"n":["m<1>"],"au.T":"1"},"fm":{"dA":["1","m<1>"],"au":["1","m<1>"],"n":["m<1>"]},"fB":{"dA":["1","m<1>"],"au":["1","m<1>"],"n":["m<1>"],"au.T":"1"},"dA":{"au":["1","2"],"n":["2"]},"rq":{"cd":[],"bJ":[],"a6":["bJ"]},"bh":{"bW":[],"a6":["bW"]},"aw":{"rq":[],"cd":[],"bJ":[],"a6":["bJ"]},"bW":{"a6":["bW"]},"jP":{"bW":[],"a6":["bW"]},"bJ":{"a6":["bJ"]},"jQ":{"bJ":[],"a6":["bJ"]},"ek":{"bJ":[],"a6":["bJ"]},"cd":{"bJ":[],"a6":["bJ"]},"kd":{"d5":[]},"kk":{"aj":[]},"ko":{"aj":[]},"kq":{"aC":[],"aj":[]},"kr":{"aC":[],"aj":[]},"h2":{"aj":[]},"c1":{"h":["E"],"h.E":"E"},"ke":{"L":["E"]},"aR":{"E":[],"Z":["E"],"aH":[],"aS":[],"cG":[],"Z.T":"E"},"en":{"E":[],"Z":["E"],"aH":[],"aS":[],"Z.T":"E"},"fY":{"E":[],"Z":["E"],"aH":[],"aS":[],"Z.T":"E"},"kb":{"E":[],"Z":["E"],"aH":[],"aS":[]},"kc":{"ep":[],"E":[],"Z":["E"],"aH":[],"aS":[],"Z.T":"E"},"fZ":{"E":[],"Z":["E"],"aH":[],"aS":[],"Z.T":"E"},"kf":{"E":[],"d6":["E"],"aH":[],"aS":[],"d6.T":"E"},"aG":{"ep":[],"E":[],"Z":["E"],"d6":["E"],"aH":[],"aS":[],"cG":[],"d6.T":"E","Z.T":"E"},"E":{"aH":[],"aS":[]},"h4":{"E":[],"Z":["E"],"aH":[],"aS":[],"Z.T":"E"},"es":{"E":[],"Z":["E"],"aH":[],"aS":[],"Z.T":"E"},"eo":{"n":["e"]},"eq":{"Z":["E"],"aH":[],"aS":[]},"h0":{"dY":["1"],"m":["1"],"ev":["1"],"z":["1"],"h":["1"]},"h3":{"eq":[],"Z":["E"],"aH":[],"aS":[],"Z.T":"E"},"h5":{"eq":[],"Z":["E"],"aH":[],"aS":[],"Z.T":"E"},"kt":{"ks":[]},"kg":{"cl":["m","e"]},"ld":{"dH":[],"fN":["m"]},"lk":{"dH":[],"fN":["m"]},"c_":{"a1":[]},"c0":{"a1":[]},"bB":{"a1":[]},"bC":{"a1":[]},"bM":{"a1":[]},"c2":{"a1":[]},"bd":{"a1":[]},"h6":{"a1":[]},"dI":{"h6":[],"a1":[]},"kh":{"h":["a1"],"h.E":"a1"},"ki":{"L":["a1"]},"dg":{"fN":["1"]},"nC":{"n":["1"]}}')) +A.xx(v.typeUniverse,JSON.parse('{"em":1,"aW":1}')) +var u={S:"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\u03f6\x00\u0404\u03f4 \u03f4\u03f6\u01f6\u01f6\u03f6\u03fc\u01f4\u03ff\u03ff\u0584\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u05d4\u01f4\x00\u01f4\x00\u0504\u05c4\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u0400\x00\u0400\u0200\u03f7\u0200\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u03ff\u0200\u0200\u0200\u03f7\x00",t:"\x01\x01)==\xb5\x8d\x15)QeyQQ\xc9===\xf1\xf0\x00\x01)==\xb5\x8d\x15)QeyQQ\xc9===\xf1\xf0\x01\x01)==\xb5\x8d\x15(QeyQQ\xc9===\xf1\xf0\x01\x01(<<\xb4\x8c\x15(PdxPP\xc8<<<\xf1\xf0\x01\x01)==\xb5\x8d\x15(PeyQQ\xc9===\xf1\xf0\x01\x01)==\xb5\x8d\x15(PdyPQ\xc9===\xf1\xf0\x01\x01)==\xb5\x8d\x15(QdxPP\xc9===\xf1\xf0\x01\x01)==\xb5\x8d\x15(QeyQQ\xc9\u011a==\xf1\xf0\xf0\xf0\xf0\xf0\xf0\xdc\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0\x01\x01)==\u0156\x8d\x15(QeyQQ\xc9===\xf1\xf0\x01\x01)==\xb5\x8d\x15(QeyQQ\xc9\u012e\u012e\u0142\xf1\xf0\x01\x01)==\xa1\x8d\x15(QeyQQ\xc9===\xf1\xf0\x00\x00(<<\xb4\x8c\x14(PdxPP\xc8<<<\xf0\xf0\x01\x01)==\xb5\x8d\x15)QeyQQ\xc9===\xf0\xf0??)\u0118=\xb5\x8c?)QeyQQ\xc9=\u0118\u0118?\xf0??)==\xb5\x8d?)QeyQQ\xc9\u012c\u012c\u0140?\xf0??)==\xb5\x8d?)QeyQQ\xc8\u0140\u0140\u0140?\xf0\xdc\xdc\xdc\xdc\xdc\u0168\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc\xdc\x00\xa1\xa1\xa1\xa1\xa1\u0154\xa1\xa1\xa1\xa1\xa1\xa1\xa1\xa1\xa1\xa1\xa1\xa1\xa1\x00",e:"\x10\x10\b\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x10\x10\x10\x10\x10\x02\x02\x02\x04\x04\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x01\x01\x01\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x02\x0e\x02\x02\x02\x0e\x0e\x0e\x0e\x02\x02\x10\x02\x10\x04\x10\x04\x04\x02\x10\x10\x10\x02\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x06\x02\x02\x02\x02\x06\x02\x06\x02\x02\x02\x02\x06\x06\x06\x02\x06\x02\x02\x02\x02\x02\x02\x02\x02\x04\x10\x10\x10\x10\x02\x02\x04\x04\x02\x02\x04\x04\x11\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x0e\x0e\x02\x0e\x10\x04\x04\x04\x04\x02\x10\x10\x10\x02\x10\x10\x10\x11\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x0e\x0e\x0e\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x0e\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x04\x10\x10\x10\x10\x10\x10\x02\x10\x10\x04\x04\x10\x10\x02\x10\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x04\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x10\x10\x02\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x04\x10\x10\x10\x10\x10\x10\x10\x04\x04\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x02\x02\x10\x02\x10\x10\x10\x02\x10\x10\x02\x02\x02\x02\x02\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x04\x04\x10\x02\x02\x02\x02\x04\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x04\x04\x11\x04\x04\x02\x10\x10\x10\x10\x10\x10\x10\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\f\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\f\r\r\r\r\r\r\r\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\x02\x02\x02\x02\x04\x10\x10\x10\x10\x02\x04\x04\x04\x02\x04\x04\x04\x11\b\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x01\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x10\x10\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x10\x10\x10\x10\x10\x10\x10\x02\x10\x10\x02\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x02\x02\x02\x10\x10\x10\x10\x10\x10\x01\x01\x01\x01\x01\x01\x01\x01\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x0e\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x06\x06\x06\x02\x02\x02\x02\x02\x10\x04\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x04\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\x02\x02\x02\x04\x04\x10\x04\x04\x10\x04\x04\x02\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x02\x02\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x02\x02\x02\x10\x04\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x02\x0e\x0e\x02\x0e\x0e\x0e\x0e\x0e\x02\x02\x10\x02\x10\x10\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x02\x0e\x0e\x02\x0e\x0e\x0e\x0e\x0e\x02\x02\x10\x02\x04\x04\x10\x10\x10\x10\x02\x02\x04\x04\x02\x02\x04\x04\x11\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x02\x02\x02\x02\x0e\x0e\x02\x0e\n\n\n\n\n\n\n\x02\x02\x02\x02\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\v\x10\x10\b\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x10\x10\x10\x10\x10\x10\x10\x02\x10\x10\x10\x10\x10\x10\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x04\x10\x10\x10\x10\x10\x10\x10\x04\x10\x10\x04\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x02\x02\x02\x10\x02\x10\x10\x02\x10\x10\x10\x10\x10\x10\x10\b\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x04\x04\x04\x02\x10\x10\x02\x04\x04\x10\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x04\x04\x04\x04\x04\x02\x04\x04\x02\x02\x10\x10\x10\x10\b\x04\b\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x04\x10\x10\x10\x10\x02\x02\x10\x10\x04\x04\x04\x04\x10\x02\x02\x02\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x07\x01\x01\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x02\x02\x02\x02\x04\x04\x10\x10\x04\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\b\x02\x10\x10\x10\x10\x02\x10\x10\x10\x02\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x10\x04\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x10\x02\x02\x04\x10\x10\x02\x02\x02\x02\x02\x02\x10\x04\x10\x10\x04\x04\x04\x10\x04\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x01\x03\x0f\x01\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x04\x04\x10\x10\x04\x04\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x01\x01\x01\x01\x01\x01\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x02\x01\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x10\x10\x10\x02\x02\x10\x10\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x0e\x0e\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x04\x10\x10\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x10\x04\x04\x10\x10\x10\x02\x10\x02\x04\x04\x04\x04\x04\x04\x04\x10\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x04\x10\x10\x10\x10\x04\x04\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x04\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x10\x02\b\b\x02\x02\x02\x02\x02\x10\x10\x10\x10\x02\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x10\x04\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x04\x10\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x04\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\b\b\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x04\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x10\x10\x02\x10\x04\x04\x02\x02\x02\x04\x04\x04\x02\x04\x04\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x10\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x04\x04\x10\x10\x10\x10\x04\x04\x10\x10\x04\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x10\x04\x10\x04\x04\x04\x04\x02\x02\x04\x04\x02\x02\x04\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x02\x02\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x04\x04\x10\x10\x10\x10\x10\x10\x02\x10\x02\x02\x10\x02\x10\x10\x10\x04\x02\x04\x04\x10\x10\x10\b\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x10\x10\x02\x02\x02\x02\x10\x10\x02\x02\x10\x10\x10\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\b\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x10\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x04\x04\x10\x10\x04\x04\x04\x02\x02\x02\x02\x04\x04\x10\x04\x04\x04\x04\x04\x04\x10\x10\x10\x02\x02\x02\x02\x10\x10\x10\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x10\x04\x10\x02\x04\x04\x10\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x04\x10\x10\x10\x10\x04\x04\x10\x10\x02\x02\b\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\b\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x10\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x04\x04\x10\x10\x10\x10\x02\x02\x04\x04\x04\x04\x10\x10\x04\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x04\x10\x02\x02\x10\x10\x10\x10\x04\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x10\x10\x10\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x04\x04\x10\x10\x10\x10\x10\x10\x04\x10\x04\x04\x10\x04\x10\x10\x04\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x04\x10\x10\x10\x04\x04\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x10\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\b\b\b\b\b\b\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x01\x02\x02\x02\x10\x10\x02\x10\x10\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x02\x06\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x02\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x04\b\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x04\x04\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\b\b\b\b\b\b\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\n\x02\x02\x02\n\n\n\n\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x02\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x02\x06\x02\x06\x02\x02\x02\x02\x02\x02\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x10\x02\x10\x02\x02\x02\x02\x04\x04\x04\x04\x04\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x10\x02\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x02\x02\x02\x04\x10\x10\x10\x10\x10\x02\x10\x10\x04\x02\x04\x04\x11\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x04\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x04\x10\x10\x04\x04\x02\x02\x02\x02\x02\x04\x10\x02\x02\x02\x02\x02\x02\x02\x02\x02",U:"\x15\x01)))\xb5\x8d\x01=Qeyey\xc9)))\xf1\xf0\x15\x01)))\xb5\x8d\x00=Qeyey\xc9)))\xf1\xf0\x15\x01)((\xb5\x8d\x01=Qeyey\xc9(((\xf1\xf0\x15\x01(((\xb4\x8c\x01"),i9:s("eP"),M:s("r"),o:s("r"),b:s("b8"),k0:s("dg>"),nP:s("dg"),cs:s("dh"),W:s("eS"),dA:s("eT"),hd:s("aJ"),gt:s("z<@>"),Q:s("K"),ia:s("H"),m9:s("ig"),pf:s("cQ"),cC:s("cQ<~>"),gw:s("eY"),ht:s("bg"),k5:s("bu"),mg:s("dj"),aN:s("ih"),fc:s("ii"),iA:s("eZ"),pd:s("ij"),A:s("dk"),mz:s("ik"),ib:s("f_"),fj:s("dl"),fW:s("f0"),mv:s("f1"),az:s("cR"),kZ:s("f2"),j1:s("f3"),ck:s("cm"),f5:s("f4"),aw:s("il"),eo:s("f5"),gK:s("cS"),c9:s("cn"),ni:s("f6"),eH:s("im"),on:s("f7"),iV:s("co"),p7:s("f8"),hl:s("io"),gF:s("ip"),oe:s("iq"),ad:s("fa"),am:s("fb"),fz:s("a0"),mA:s("aj"),nq:s("F"),lW:s("aC"),gY:s("cq"),ha:s("a"),mj:s("a"),j:s("a>"),r:s("a>>"),e:s("a>>>"),t:s("a>>>>"),V:s("a>>>>>"),i:s("a>>>>>>"),J:s("a>>>>>>>"),O:s("a>>>>>>>>"),l:s("a>>>>>>>>>"),x:s("a>>>>>>>>>>"),Y:s("a>>>>>>>>>>>"),k:s("a>>>>>>>>>>>>"),_:s("a>>>>>>>>>>>>>"),T:s("a>>>>>>>>>>>>>>"),E:s("a>>>>>>>>>>>>>>>"),kg:s("a>>>>>>>>>>>>>>>>"),oJ:s("a>>>>>>>>>>>>>>>>>"),m:s("aP<+(e,e)>"),fr:s("aP"),gx:s("cs"),aB:s("fg"),jL:s("iQ"),bg:s("rs"),nZ:s("e2<@>"),fY:s("h"),bq:s("h"),bO:s("h"),eh:s("h"),b7:s("h"),e7:s("h<@>"),fm:s("h"),c_:s("y"),aa:s("y"),il:s("y"),lv:s("y"),mE:s("y"),bz:s("y"),l6:s("y"),bS:s("y
"),oc:s("y"),oj:s("y"),ik:s("y"),hJ:s("y"),lu:s("y"),mt:s("y"),nS:s("y"),cJ:s("y"),jA:s("y"),oQ:s("y"),ic:s("y>"),ke:s("y>"),kU:s("y"),cx:s("y"),bD:s("y"),jj:s("y>"),bX:s("y>"),fa:s("y>"),ge:s("y>"),ig:s("y>"),dy:s("y>"),a:s("y>"),gg:s("y"),lU:s("y"),im:s("y"),fG:s("y"),iM:s("y"),s:s("y"),ks:s("y"),kG:s("y"),pp:s("y"),eB:s("y"),oi:s("y"),iJ:s("y"),g7:s("y"),dg:s("y"),dG:s("y<@>"),Z:s("y"),lB:s("y"),hg:s("y"),mf:s("y"),iy:s("aU<@>"),bE:s("e4"),bp:s("ap"),dY:s("cu"),dX:s("bw<@>"),jO:s("bx"),du:s("bj

"),ln:s("bj"),mP:s("bj<@>"),oP:s("mL"),hI:s("cX<@>"),jB:s("m"),nw:s("m"),kn:s("m"),eP:s("m>"),ez:s("m

"),aI:s("m"),bF:s("m"),lR:s("m"),aE:s("m"),iF:s("m"),p6:s("m"),p:s("m<@>"),L:s("m"),eU:s("m"),mH:s("al"),kY:s("b0"),lO:s("b0>"),a3:s("e9<@,@>"),av:s("d<@,@>"),f:s("d"),gQ:s("Q"),iZ:s("Q"),f1:s("fr>"),aj:s("by"),hD:s("dw"),fh:s("am"),d:s("aK"),K:s("p"),bQ:s("bT<+(e,ag)>"),g1:s("bT"),eK:s("bT"),kT:s("bT"),jK:s("j"),n4:s("n<@>"),m4:s("dx"),dl:s("fA"),eN:s("ab"),lZ:s("zP"),aK:s("+()"),R:s("+(e,ag)"),by:s("u"),mD:s("u>"),g:s("u<+(e,ag)>"),h:s("u"),eM:s("u"),dE:s("u"),cB:s("u"),i8:s("u"),gV:s("u"),bj:s("u"),jk:s("u"),hN:s("u"),d8:s("u"),br:s("u

"),gy:s("u<@>"),mi:s("u<~>"),lg:s("fE"),ob:s("nC<@>"),hF:s("X"),mO:s("bV"),dT:s("d_"),b9:s("eh"),bT:s("dB"),i6:s("fK"),cu:s("ei<@>"),i2:s("bk"),hj:s("bk<@>"),nO:s("bk"),i3:s("fN"),hq:s("bW"),hs:s("bJ"),ol:s("cd"),fp:s("dC"),F:s("d1"),ny:s("d2"),N:s("e"),v:s("bK"),po:s("e(cc)"),gL:s("e(e)"),y:s("T"),k2:s("T<~>"),bR:s("el"),fn:s("cA"),oI:s("bY"),n9:s("fU"),in:s("R"),aJ:s("a3"),do:s("cC"),ev:s("jZ"),mK:s("dF"),bW:s("cE"),jJ:s("k1"),w:s("O"),lS:s("O"),nk:s("O"),os:s("O"),C:s("O"),lH:s("O"),pl:s("bZ"),k7:s("bZ"),G:s("aR"),bf:s("c_"),lY:s("c0"),ee:s("bB"),n8:s("c1"),dH:s("bC"),P:s("aG"),cW:s("bM"),j7:s("d5"),mX:s("a1"),fw:s("av"),jN:s("cG"),ax:s("aH"),I:s("E"),co:s("c2"),l3:s("bd"),hO:s("h6"),f9:s("aq"),j_:s("aB<@>"),cU:s("aB<~>"),D:s("aL"),mp:s("dK"),nR:s("bD"),fA:s("ey"),k4:s("A"),c:s("A()"),cT:s("A(K)"),iW:s("A(p)"),dB:s("A(e)"),aP:s("A(aL)"),dx:s("V"),z:s("@"),mY:s("@()"),mq:s("@(p)"),ng:s("@(p,d1)"),f6:s("@(e)"),S:s("b"),g0:s("aJ?"),mV:s("K?"),cX:s("cr?"),mU:s("ap?"),n:s("d?"),X:s("p?"),g9:s("bc?"),jv:s("e?"),jt:s("e(cc)?"),nU:s("bl?"),q:s("aG?"),np:s("dJ<@,@>?"),dd:s("aL?"),nF:s("kP?"),fU:s("A?"),pi:s("A(e)?"),jX:s("V?"),aV:s("b?"),dU:s("b(K,K)?"),jh:s("b5?"),cZ:s("b5"),H:s("~"),U:s("~()"),p9:s("~(K)"),f0:s("~(h)"),m3:s("~(eb)")}})();(function constants(){var s=hunkHelpers.makeConstList +B.iO=J.iS.prototype +B.a=J.y.prototype +B.f=J.fi.prototype +B.cU=J.e4.prototype +B.cV=J.e5.prototype +B.b=J.ct.prototype +B.iP=J.cu.prototype +B.iQ=J.fk.prototype +B.aA=A.fv.prototype +B.k=A.dw.prototype +B.hw=J.jA.prototype +B.cF=J.dF.prototype +B.i_=new A.hT(!1,127) +B.F=new A.i0(0,"littleEndian") +B.aU=new A.i0(1,"bigEndian") +B.ic=new A.e0(A.zm(),A.a_("e0")) +B.id=new A.hS() +B.ie=new A.hX() +B.cJ=new A.eL() +B.ig=new A.eR(A.a_("eR<0&>")) +B.l=new A.eQ() +B.cK=new A.eX(A.a_("eX<0&>")) +B.cL=new A.ie() +B.bE=new A.ie() +B.ih=new A.f9() +B.ii=new A.iR() +B.cM=function getTagFallback(o) { + var s = Object.prototype.toString.call(o); + return s.substring(8, s.length - 1); +} +B.ij=function() { + var toStringFunction = Object.prototype.toString; + function getTag(o) { + var s = toStringFunction.call(o); + return s.substring(8, s.length - 1); + } + function getUnknownTag(object, tag) { + if (/^HTML[A-Z].*Element$/.test(tag)) { + var name = toStringFunction.call(object); + if (name == "[object Object]") return null; + return "HTMLElement"; + } + } + function getUnknownTagGenericBrowser(object, tag) { + if (object instanceof HTMLElement) return "HTMLElement"; + return getUnknownTag(object, tag); + } + function prototypeForTag(tag) { + if (typeof window == "undefined") return null; + if (typeof window[tag] == "undefined") return null; + var constructor = window[tag]; + if (typeof constructor != "function") return null; + return constructor.prototype; + } + function discriminator(tag) { return null; } + var isBrowser = typeof HTMLElement == "function"; + return { + getTag: getTag, + getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag, + prototypeForTag: prototypeForTag, + discriminator: discriminator }; +} +B.ip=function(getTagFallback) { + return function(hooks) { + if (typeof navigator != "object") return hooks; + var userAgent = navigator.userAgent; + if (typeof userAgent != "string") return hooks; + if (userAgent.indexOf("DumpRenderTree") >= 0) return hooks; + if (userAgent.indexOf("Chrome") >= 0) { + function confirm(p) { + return typeof window == "object" && window[p] && window[p].name == p; + } + if (confirm("Window") && confirm("HTMLElement")) return hooks; + } + hooks.getTag = getTagFallback; + }; +} +B.ik=function(hooks) { + if (typeof dartExperimentalFixupGetTag != "function") return hooks; + hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag); +} +B.io=function(hooks) { + if (typeof navigator != "object") return hooks; + var userAgent = navigator.userAgent; + if (typeof userAgent != "string") return hooks; + if (userAgent.indexOf("Firefox") == -1) return hooks; + var getTag = hooks.getTag; + var quickMap = { + "BeforeUnloadEvent": "Event", + "DataTransfer": "Clipboard", + "GeoGeolocation": "Geolocation", + "Location": "!Location", + "WorkerMessageEvent": "MessageEvent", + "XMLDocument": "!Document"}; + function getTagFirefox(o) { + var tag = getTag(o); + return quickMap[tag] || tag; + } + hooks.getTag = getTagFirefox; +} +B.im=function(hooks) { + if (typeof navigator != "object") return hooks; + var userAgent = navigator.userAgent; + if (typeof userAgent != "string") return hooks; + if (userAgent.indexOf("Trident/") == -1) return hooks; + var getTag = hooks.getTag; + var quickMap = { + "BeforeUnloadEvent": "Event", + "DataTransfer": "Clipboard", + "HTMLDDElement": "HTMLElement", + "HTMLDTElement": "HTMLElement", + "HTMLPhraseElement": "HTMLElement", + "Position": "Geoposition" + }; + function getTagIE(o) { + var tag = getTag(o); + var newTag = quickMap[tag]; + if (newTag) return newTag; + if (tag == "Object") { + if (window.DataView && (o instanceof window.DataView)) return "DataView"; + } + return tag; + } + function prototypeForTagIE(tag) { + var constructor = window[tag]; + if (constructor == null) return null; + return constructor.prototype; + } + hooks.getTag = getTagIE; + hooks.prototypeForTag = prototypeForTagIE; +} +B.il=function(hooks) { + var getTag = hooks.getTag; + var prototypeForTag = hooks.prototypeForTag; + function getTagFixed(o) { + var tag = getTag(o); + if (tag == "Document") { + if (!!o.xmlVersion) return "!Document"; + return "!HTMLDocument"; + } + return tag; + } + function prototypeForTagFixed(tag) { + if (tag == "Document") return null; + return prototypeForTag(tag); + } + hooks.getTag = getTagFixed; + hooks.prototypeForTag = prototypeForTagFixed; +} +B.cN=function(hooks) { return hooks; } + +B.iq=new A.iY() +B.ir=new A.jp() +B.u=new A.nK() +B.E=new A.k4() +B.cO=new A.k8() +B.L3={amp:0,apos:1,gt:2,lt:3,quot:4} +B.qL=new A.r(B.L3,["&","'",">","<",'"'],t.o) +B.bF=new A.kd() +B.cP=new A.oW() +B.a3=new A.kS() +B.aV=new A.kW() +B.cQ=new A.p6() +B.aW=new A.dV(0,"none") +B.cR=new A.dV(1,"deflate") +B.cS=new A.dV(2,"bzip2") +B.is=new A.ck(!1) +B.W=new A.ck(!0) +B.it=new A.aT(0,"xhtml11") +B.iu=new A.aT(1,"dtbook") +B.iv=new A.aT(10,"imageSVG") +B.iw=new A.aT(11,"imageBMP") +B.ix=new A.aT(12,"fontTrueType") +B.iy=new A.aT(13,"fontOpenType") +B.iz=new A.aT(14,"other") +B.iA=new A.aT(2,"dtbookNCX") +B.iB=new A.aT(3,"oeb1Document") +B.iC=new A.aT(4,"xml") +B.iD=new A.aT(5,"css") +B.iE=new A.aT(6,"oeb1CSS") +B.iF=new A.aT(7,"imageGIF") +B.iG=new A.aT(8,"imageJPEG") +B.iH=new A.aT(9,"imagePNG") +B.bG=new A.ir(0,"epub2") +B.cT=new A.ir(1,"epub3") +B.iM=new A.aC("Chapter is outside the EPUB spine.",null,null) +B.iN=new A.aC("The EPUB has no readable spine.",null,null) +B.iR=new A.j_(null) +B.aX=new A.cX(B.ig,A.a_("cX")) +B.af=s([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125],t.Z) +B.iS=s(["table","tbody","tfoot","thead","tr"],t.s) +B.iT=s([0,0],t.Z) +B.iU=s([1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145],t.Z) +B.bH=s(["dd","dt","li","option","optgroup","p","rp","rt"],t.s) +B.iV=s([5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],t.Z) +B.iW=s(["+//silmaril//dtd html pro v0r11 19970101//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//as//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sq//dtd html 2.0 hotmetal + extensions//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],t.s) +B.iX=s([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],t.Z) +B.i=s([1353184337,1399144830,3282310938,2522752826,3412831035,4047871263,2874735276,2466505547,1442459680,4134368941,2440481928,625738485,4242007375,3620416197,2151953702,2409849525,1230680542,1729870373,2551114309,3787521629,41234371,317738113,2744600205,3338261355,3881799427,2510066197,3950669247,3663286933,763608788,3542185048,694804553,1154009486,1787413109,2021232372,1799248025,3715217703,3058688446,397248752,1722556617,3023752829,407560035,2184256229,1613975959,1165972322,3765920945,2226023355,480281086,2485848313,1483229296,436028815,2272059028,3086515026,601060267,3791801202,1468997603,715871590,120122290,63092015,2591802758,2768779219,4068943920,2997206819,3127509762,1552029421,723308426,2461301159,4042393587,2715969870,3455375973,3586000134,526529745,2331944644,2639474228,2689987490,853641733,1978398372,971801355,2867814464,111112542,1360031421,4186579262,1023860118,2919579357,1186850381,3045938321,90031217,1876166148,4279586912,620468249,2548678102,3426959497,2006899047,3175278768,2290845959,945494503,3689859193,1191869601,3910091388,3374220536,0,2206629897,1223502642,2893025566,1316117100,4227796733,1446544655,517320253,658058550,1691946762,564550760,3511966619,976107044,2976320012,266819475,3533106868,2660342555,1338359936,2720062561,1766553434,370807324,179999714,3844776128,1138762300,488053522,185403662,2915535858,3114841645,3366526484,2233069911,1275557295,3151862254,4250959779,2670068215,3170202204,3309004356,880737115,1982415755,3703972811,1761406390,1676797112,3403428311,277177154,1076008723,538035844,2099530373,4164795346,288553390,1839278535,1261411869,4080055004,3964831245,3504587127,1813426987,2579067049,4199060497,577038663,3297574056,440397984,3626794326,4019204898,3343796615,3251714265,4272081548,906744984,3481400742,685669029,646887386,2764025151,3835509292,227702864,2613862250,1648787028,3256061430,3904428176,1593260334,4121936770,3196083615,2090061929,2838353263,3004310991,999926984,2809993232,1852021992,2075868123,158869197,4095236462,28809964,2828685187,1701746150,2129067946,147831841,3873969647,3650873274,3459673930,3557400554,3598495785,2947720241,824393514,815048134,3227951669,935087732,2798289660,2966458592,366520115,1251476721,4158319681,240176511,804688151,2379631990,1303441219,1414376140,3741619940,3820343710,461924940,3089050817,2136040774,82468509,1563790337,1937016826,776014843,1511876531,1389550482,861278441,323475053,2355222426,2047648055,2383738969,2302415851,3995576782,902390199,3991215329,1018251130,1507840668,1064563285,2043548696,3208103795,3939366739,1537932639,342834655,2262516856,2180231114,1053059257,741614648,1598071746,1925389590,203809468,2336832552,1100287487,1895934009,3736275976,2632234200,2428589668,1636092795,1890988757,1952214088,1113045200],t.Z) +B.n={type:0,value:1} +B.GU=new A.r(B.n,[670,"top-left-corner"],t.M) +B.H4=new A.r(B.n,[671,"top-left"],t.M) +B.GV=new A.r(B.n,[672,"top-center"],t.M) +B.Hk=new A.r(B.n,[673,"top-right"],t.M) +B.Hf=new A.r(B.n,[674,"top-right-corner"],t.M) +B.Hg=new A.r(B.n,[675,"bottom-left-corner"],t.M) +B.H8=new A.r(B.n,[676,"bottom-left"],t.M) +B.H1=new A.r(B.n,[677,"bottom-center"],t.M) +B.Hn=new A.r(B.n,[678,"bottom-right"],t.M) +B.Hi=new A.r(B.n,[679,"bottom-right-corner"],t.M) +B.GX=new A.r(B.n,[680,"left-top"],t.M) +B.H9=new A.r(B.n,[681,"left-middle"],t.M) +B.Hj=new A.r(B.n,[682,"right-bottom"],t.M) +B.Hh=new A.r(B.n,[683,"right-top"],t.M) +B.GW=new A.r(B.n,[684,"right-middle"],t.M) +B.GR=new A.r(B.n,[685,"right-bottom"],t.M) +B.iY=s([B.GU,B.H4,B.GV,B.Hk,B.Hf,B.Hg,B.H8,B.H1,B.Hn,B.Hi,B.GX,B.H9,B.Hj,B.Hh,B.GW,B.GR],t.ic) +B.cW=s(["-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],t.s) +B.X=s([0,79764919,159529838,222504665,319059676,398814059,445009330,507990021,638119352,583659535,797628118,726387553,890018660,835552979,1015980042,944750013,1276238704,1221641927,1167319070,1095957929,1595256236,1540665371,1452775106,1381403509,1780037320,1859660671,1671105958,1733955601,2031960084,2111593891,1889500026,1952343757,2552477408,2632100695,2443283854,2506133561,2334638140,2414271883,2191915858,2254759653,3190512472,3135915759,3081330742,3009969537,2905550212,2850959411,2762807018,2691435357,3560074640,3505614887,3719321342,3648080713,3342211916,3287746299,3467911202,3396681109,4063920168,4143685023,4223187782,4286162673,3779000052,3858754371,3904687514,3967668269,881225847,809987520,1023691545,969234094,662832811,591600412,771767749,717299826,311336399,374308984,453813921,533576470,25881363,88864420,134795389,214552010,2023205639,2086057648,1897238633,1976864222,1804852699,1867694188,1645340341,1724971778,1587496639,1516133128,1461550545,1406951526,1302016099,1230646740,1142491917,1087903418,2896545431,2825181984,2770861561,2716262478,3215044683,3143675388,3055782693,3001194130,2326604591,2389456536,2200899649,2280525302,2578013683,2640855108,2418763421,2498394922,3769900519,3832873040,3912640137,3992402750,4088425275,4151408268,4197601365,4277358050,3334271071,3263032808,3476998961,3422541446,3585640067,3514407732,3694837229,3640369242,1762451694,1842216281,1619975040,1682949687,2047383090,2127137669,1938468188,2001449195,1325665622,1271206113,1183200824,1111960463,1543535498,1489069629,1434599652,1363369299,622672798,568075817,748617968,677256519,907627842,853037301,1067152940,995781531,51762726,131386257,177728840,240578815,269590778,349224269,429104020,491947555,4046411278,4126034873,4172115296,4234965207,3794477266,3874110821,3953728444,4016571915,3609705398,3555108353,3735388376,3664026991,3290680682,3236090077,3449943556,3378572211,3174993278,3120533705,3032266256,2961025959,2923101090,2868635157,2813903052,2742672763,2604032198,2683796849,2461293480,2524268063,2284983834,2364738477,2175806836,2238787779,1569362073,1498123566,1409854455,1355396672,1317987909,1246755826,1192025387,1137557660,2072149281,2135122070,1912620623,1992383480,1753615357,1816598090,1627664531,1707420964,295390185,358241886,404320391,483945776,43990325,106832002,186451547,266083308,932423249,861060070,1041341759,986742920,613929101,542559546,756411363,701822548,3316196985,3244833742,3425377559,3370778784,3601682597,3530312978,3744426955,3689838204,3819031489,3881883254,3928223919,4007849240,4037393693,4100235434,4180117107,4259748804,2310601993,2373574846,2151335527,2231098320,2596047829,2659030626,2470359227,2550115596,2947551409,2876312838,2788305887,2733848168,3165939309,3094707162,3040238851,2985771188],t.Z) +B.iZ=s(["yY","sS","tT","eE","mM"],t.s) +B.j_=s([23,114,69,56,80,144],t.Z) +B.j0=s(["C","D","A","T","A","["],t.s) +B.L=s([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],t.Z) +B.j1=s(["oO","cC","tT","yY","pP","eE"],t.s) +B.H2=new A.r(B.n,[641,"import"],t.M) +B.H0=new A.r(B.n,[642,"media"],t.M) +B.Hb=new A.r(B.n,[643,"page"],t.M) +B.H3=new A.r(B.n,[644,"charset"],t.M) +B.GS=new A.r(B.n,[645,"stylet"],t.M) +B.Hm=new A.r(B.n,[646,"keyframes"],t.M) +B.Hp=new A.r(B.n,[647,"-webkit-keyframes"],t.M) +B.H5=new A.r(B.n,[648,"-moz-keyframes"],t.M) +B.Hc=new A.r(B.n,[649,"-ms-keyframes"],t.M) +B.Hd=new A.r(B.n,[650,"-o-keyframes"],t.M) +B.Ho=new A.r(B.n,[651,"font-face"],t.M) +B.He=new A.r(B.n,[652,"namespace"],t.M) +B.GZ=new A.r(B.n,[653,"host"],t.M) +B.GY=new A.r(B.n,[654,"mixin"],t.M) +B.H7=new A.r(B.n,[655,"include"],t.M) +B.Ha=new A.r(B.n,[656,"content"],t.M) +B.GQ=new A.r(B.n,[657,"extend"],t.M) +B.H_=new A.r(B.n,[658,"-moz-document"],t.M) +B.GT=new A.r(B.n,[659,"supports"],t.M) +B.H6=new A.r(B.n,[660,"viewport"],t.M) +B.Hl=new A.r(B.n,[661,"-ms-viewport"],t.M) +B.j2=s([B.H2,B.H0,B.Hb,B.H3,B.GS,B.Hm,B.Hp,B.H5,B.Hc,B.Hd,B.Ho,B.He,B.GZ,B.GY,B.H7,B.Ha,B.GQ,B.H_,B.GT,B.H6,B.Hl],t.ic) +B.Y=s([619,720,127,481,931,816,813,233,566,247,985,724,205,454,863,491,741,242,949,214,733,859,335,708,621,574,73,654,730,472,419,436,278,496,867,210,399,680,480,51,878,465,811,169,869,675,611,697,867,561,862,687,507,283,482,129,807,591,733,623,150,238,59,379,684,877,625,169,643,105,170,607,520,932,727,476,693,425,174,647,73,122,335,530,442,853,695,249,445,515,909,545,703,919,874,474,882,500,594,612,641,801,220,162,819,984,589,513,495,799,161,604,958,533,221,400,386,867,600,782,382,596,414,171,516,375,682,485,911,276,98,553,163,354,666,933,424,341,533,870,227,730,475,186,263,647,537,686,600,224,469,68,770,919,190,373,294,822,808,206,184,943,795,384,383,461,404,758,839,887,715,67,618,276,204,918,873,777,604,560,951,160,578,722,79,804,96,409,713,940,652,934,970,447,318,353,859,672,112,785,645,863,803,350,139,93,354,99,820,908,609,772,154,274,580,184,79,626,630,742,653,282,762,623,680,81,927,626,789,125,411,521,938,300,821,78,343,175,128,250,170,774,972,275,999,639,495,78,352,126,857,956,358,619,580,124,737,594,701,612,669,112,134,694,363,992,809,743,168,974,944,375,748,52,600,747,642,182,862,81,344,805,988,739,511,655,814,334,249,515,897,955,664,981,649,113,974,459,893,228,433,837,553,268,926,240,102,654,459,51,686,754,806,760,493,403,415,394,687,700,946,670,656,610,738,392,760,799,887,653,978,321,576,617,626,502,894,679,243,440,680,879,194,572,640,724,926,56,204,700,707,151,457,449,797,195,791,558,945,679,297,59,87,824,713,663,412,693,342,606,134,108,571,364,631,212,174,643,304,329,343,97,430,751,497,314,983,374,822,928,140,206,73,263,980,736,876,478,430,305,170,514,364,692,829,82,855,953,676,246,369,970,294,750,807,827,150,790,288,923,804,378,215,828,592,281,565,555,710,82,896,831,547,261,524,462,293,465,502,56,661,821,976,991,658,869,905,758,745,193,768,550,608,933,378,286,215,979,792,961,61,688,793,644,986,403,106,366,905,644,372,567,466,434,645,210,389,550,919,135,780,773,635,389,707,100,626,958,165,504,920,176,193,713,857,265,203,50,668,108,645,990,626,197,510,357,358,850,858,364,936,638],t.Z) +B.j3=s(["address","div","p"],t.s) +B.j4=s(["\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07","\b","\t","\n","\v","\f","\r","\x0e","\x0f","\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17","\x18","\x19","\x1a","\x1b","\x1c","\x1d","\x1e","\x1f"," ","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","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","[","\\","]","^","_","`","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","{","|","}","~","\x7f","\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8a","\x8b","\x8c","\x8d","\x8e","\x8f","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9a","\x9b","\x9c","\x9d","\x9e","\x9f","\xa0","\xa1","\xa2","\xa3","\xa4","\xa5","\xa6","\xa7","\xa8","\xa9","\xaa","\xab","\xac","\xad","\xae","\xaf","\xb0","\xb1","\xb2","\xb3","\xb4","\xb5","\xb6","\xb7","\xb8","\xb9","\xba","\xbb","\xbc","\xbd","\xbe","\xbf","\xc0","\xc1","\xc2","\xc3","\xc4","\xc5","\xc6","\xc7","\xc8","\xc9","\xca","\xcb","\xcc","\xcd","\xce","\xcf","\xd0","\xd1","\xd2","\xd3","\xd4","\xd5","\xd6","\xd7","\xd8","\xd9","\xda","\xdb","\xdc","\xdd","\xde","\xdf","\xe0","\xe1","\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea","\xeb","\xec","\xed","\xee","\xef","\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf7","\xf8","\xf9","\xfa","\xfb","\xfc","\xfd","\xfe","\xff"],t.s) +B.j5=s(["b","big","blockquote","body","br","center","code","dd","div","dl","dt","em","embed","h1","h2","h3","h4","h5","h6","head","hr","i","img","li","listing","menu","meta","nobr","ol","p","pre","ruby","s","small","span","strike","strong","sub","sup","table","tt","u","ul","var"],t.s) +B.j=s([2774754246,2222750968,2574743534,2373680118,234025727,3177933782,2976870366,1422247313,1345335392,50397442,2842126286,2099981142,436141799,1658312629,3870010189,2591454956,1170918031,2642575903,1086966153,2273148410,368769775,3948501426,3376891790,200339707,3970805057,1742001331,4255294047,3937382213,3214711843,4154762323,2524082916,1539358875,3266819957,486407649,2928907069,1780885068,1513502316,1094664062,49805301,1338821763,1546925160,4104496465,887481809,150073849,2473685474,1943591083,1395732834,1058346282,201589768,1388824469,1696801606,1589887901,672667696,2711000631,251987210,3046808111,151455502,907153956,2608889883,1038279391,652995533,1764173646,3451040383,2675275242,453576978,2659418909,1949051992,773462580,756751158,2993581788,3998898868,4221608027,4132590244,1295727478,1641469623,3467883389,2066295122,1055122397,1898917726,2542044179,4115878822,1758581177,0,753790401,1612718144,536673507,3367088505,3982187446,3194645204,1187761037,3653156455,1262041458,3729410708,3561770136,3898103984,1255133061,1808847035,720367557,3853167183,385612781,3309519750,3612167578,1429418854,2491778321,3477423498,284817897,100794884,2172616702,4031795360,1144798328,3131023141,3819481163,4082192802,4272137053,3225436288,2324664069,2912064063,3164445985,1211644016,83228145,3753688163,3249976951,1977277103,1663115586,806359072,452984805,250868733,1842533055,1288555905,336333848,890442534,804056259,3781124030,2727843637,3427026056,957814574,1472513171,4071073621,2189328124,1195195770,2892260552,3881655738,723065138,2507371494,2690670784,2558624025,3511635870,2145180835,1713513028,2116692564,2878378043,2206763019,3393603212,703524551,3552098411,1007948840,2044649127,3797835452,487262998,1994120109,1004593371,1446130276,1312438900,503974420,3679013266,168166924,1814307912,3831258296,1573044895,1859376061,4021070915,2791465668,2828112185,2761266481,937747667,2339994098,854058965,1137232011,1496790894,3077402074,2358086913,1691735473,3528347292,3769215305,3027004632,4199962284,133494003,636152527,2942657994,2390391540,3920539207,403179536,3585784431,2289596656,1864705354,1915629148,605822008,4054230615,3350508659,1371981463,602466507,2094914977,2624877800,555687742,3712699286,3703422305,2257292045,2240449039,2423288032,1111375484,3300242801,2858837708,3628615824,84083462,32962295,302911004,2741068226,1597322602,4183250862,3501832553,2441512471,1489093017,656219450,3114180135,954327513,335083755,3013122091,856756514,3144247762,1893325225,2307821063,2811532339,3063651117,572399164,2458355477,552200649,1238290055,4283782570,2015897680,2061492133,2408352771,4171342169,2156497161,386731290,3669999461,837215959,3326231172,3093850320,3275833730,2962856233,1999449434,286199582,3417354363,4233385128,3602627437,974525996],t.Z) +B.cY=s(["h1","h2","h3","h4","h5","h6"],t.s) +B.bI=s([],t.lv) +B.j7=s([],A.a_("y")) +B.j8=s([],A.a_("y")) +B.ja=s([],t.a) +B.j6=s([],t.s) +B.j9=s([],A.a_("y")) +B.cZ=s([],t.eB) +B.h=s([],t.dG) +B.iI=new A.cT(0,"undefined") +B.iJ=new A.cT(1,"front") +B.iK=new A.cT(2,"normal") +B.iL=new A.cT(3,"special") +B.jb=s([B.iI,B.iJ,B.iK,B.iL],A.a_("y")) +B.jc=s([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],t.Z) +B.aY=s([0,1,3,7,15,31,63,127,255],t.Z) +B.je=s([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],t.Z) +B.jf=s(["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],t.s) +B.d_=s([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],t.Z) +B.d0=s([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],t.Z) +B.jg=s(["poster","background"],t.s) +B.jh=s(["pre","listing","textarea"],t.s) +B.ji=s(["uU","bB","lL","iI","cC"],t.s) +B.jj=s([11,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111],t.Z) +B.jk=s(["tbody","tfoot","thead","html"],t.s) +B.v={unit:0,value:1} +B.qa=new A.r(B.v,[600,"em"],t.M) +B.q6=new A.r(B.v,[601,"ex"],t.M) +B.qw=new A.r(B.v,[602,"px"],t.M) +B.qo=new A.r(B.v,[603,"cm"],t.M) +B.ql=new A.r(B.v,[604,"mm"],t.M) +B.qd=new A.r(B.v,[605,"in"],t.M) +B.q5=new A.r(B.v,[606,"pt"],t.M) +B.qg=new A.r(B.v,[607,"pc"],t.M) +B.qc=new A.r(B.v,[608,"deg"],t.M) +B.qs=new A.r(B.v,[609,"rad"],t.M) +B.q4=new A.r(B.v,[610,"grad"],t.M) +B.qf=new A.r(B.v,[611,"turn"],t.M) +B.q9=new A.r(B.v,[612,"ms"],t.M) +B.qv=new A.r(B.v,[613,"s"],t.M) +B.qn=new A.r(B.v,[614,"hz"],t.M) +B.qk=new A.r(B.v,[615,"khz"],t.M) +B.qp=new A.r(B.v,[617,"fr"],t.M) +B.qe=new A.r(B.v,[618,"dpi"],t.M) +B.qb=new A.r(B.v,[619,"dpcm"],t.M) +B.qj=new A.r(B.v,[620,"dppx"],t.M) +B.qh=new A.r(B.v,[621,"ch"],t.M) +B.qq=new A.r(B.v,[622,"rem"],t.M) +B.q7=new A.r(B.v,[623,"vw"],t.M) +B.qm=new A.r(B.v,[624,"vh"],t.M) +B.qi=new A.r(B.v,[625,"vmin"],t.M) +B.qr=new A.r(B.v,[626,"vmax"],t.M) +B.q8=new A.r(B.v,[627,"lh"],t.M) +B.qt=new A.r(B.v,[628,"rlh"],t.M) +B.d1=s([B.qa,B.q6,B.qw,B.qo,B.ql,B.qd,B.q5,B.qg,B.qc,B.qs,B.q4,B.qf,B.q9,B.qv,B.qn,B.qk,B.qp,B.qe,B.qb,B.qj,B.qh,B.qq,B.q7,B.qm,B.qi,B.qr,B.q8,B.qt],t.ic) +B.jl=s(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"],t.s) +B.jm=s([8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8],t.Z) +B.d2=s([1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648],t.Z) +B.jn=s([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],t.Z) +B.jo=s([49,65,89,38,83,89],t.Z) +B.dn=new A.a([0,B.aW,8,B.cR,12,B.cS],A.a_("a")) +B.aS={} +B.d=new A.r(B.aS,[],A.a_("r")) +B.c=new A.a([59,B.d],t.j) +B.R=new A.a([103,B.c],t.r) +B.c3=new A.a([105,B.R],t.e) +B.a1=new A.a([108,B.c3],t.t) +B.v8=new A.a([80,B.c],t.r) +B.z=new A.a([101,B.c],t.r) +B.aO=new A.a([116,B.z],t.e) +B.S=new A.a([117,B.aO],t.t) +B.K=new A.a([99,B.S],t.V) +B.b0=new A.a([118,B.z],t.e) +B.dB=new A.a([101,B.b0],t.t) +B.aH=new A.a([114,B.dB],t.V) +B.ad=new A.a([99,B.c],t.r) +B.P=new A.a([114,B.ad],t.e) +B.a_=new A.a([105,B.P,121,B.c],t.r) +B.e=new A.a([114,B.c],t.r) +B.be=new A.a([97,B.b0],t.t) +B.a5=new A.a([114,B.be],t.V) +B.C=new A.a([97,B.c],t.r) +B.ea=new A.a([104,B.C],t.e) +B.vF=new A.a([112,B.ea],t.t) +B.r=new A.a([99,B.e],t.e) +B.eL=new A.a([97,B.r],t.t) +B.a2=new A.a([100,B.c],t.r) +B.N=new A.a([110,B.c],t.r) +B.O=new A.a([111,B.N],t.e) +B.y=new A.a([102,B.c],t.r) +B.av=new A.a([103,B.O,112,B.y],t.e) +B.ee=new A.a([105,B.O],t.t) +B.fy=new A.a([116,B.ee],t.V) +B.fb=new A.a([99,B.fy],t.i) +B.Jz=new A.a([110,B.fb],t.J) +B.I5=new A.a([117,B.Jz],t.O) +B.pP=new A.a([70,B.I5],t.l) +B.zm=new A.a([121,B.pP],t.x) +B.Bj=new A.a([108,B.zm],t.Y) +B.vt=new A.a([112,B.Bj],t.k) +B.bw=new A.a([110,B.R],t.e) +B.aL=new A.a([105,B.bw],t.t) +B.G7=new A.a([103,B.N],t.e) +B.u4=new A.a([105,B.G7],t.t) +B.DB=new A.a([99,B.e,115,B.u4],t.e) +B.aQ=new A.a([100,B.z],t.e) +B.bk=new A.a([108,B.aQ],t.t) +B.J=new A.a([105,B.bk],t.V) +B.x=new A.a([108,B.c],t.r) +B.an=new A.a([109,B.x],t.e) +B.mX=new A.a([69,B.a1,77,B.v8,97,B.K,98,B.aH,99,B.a_,102,B.e,103,B.a5,108,B.vF,109,B.eL,110,B.a2,111,B.av,112,B.vt,114,B.aL,115,B.DB,116,B.J,117,B.an],t.e) +B.ag=new A.a([104,B.c],t.r) +B.eZ=new A.a([115,B.ag],t.e) +B.I=new A.a([97,B.eZ],t.t) +B.B_=new A.a([108,B.I],t.V) +B.yX=new A.a([115,B.B_],t.i) +B.Ik=new A.a([107,B.yX],t.J) +B.b5=new A.a([101,B.a2],t.e) +B.pw=new A.a([118,B.c,119,B.b5],t.r) +B.Hq=new A.a([99,B.Ik,114,B.pw],t.e) +B.D=new A.a([121,B.c],t.r) +B.eV=new A.a([115,B.z],t.e) +B.HG=new A.a([117,B.eV],t.t) +B.wj=new A.a([97,B.HG],t.V) +B.B=new A.a([115,B.c],t.r) +B.c1=new A.a([105,B.B],t.e) +B.BG=new A.a([108,B.c1],t.t) +B.Bc=new A.a([108,B.BG],t.V) +B.HR=new A.a([117,B.Bc],t.i) +B.k9=new A.a([111,B.HR],t.J) +B.IO=new A.a([110,B.k9],t.O) +B.KU=new A.a([99,B.wj,114,B.IO,116,B.C],t.e) +B.A=new A.a([112,B.y],t.e) +B.ay=new A.a([113,B.c],t.r) +B.bS=new A.a([101,B.ay],t.e) +B.vk=new A.a([112,B.bS],t.t) +B.JO=new A.a([109,B.vk],t.V) +B.A8=new A.a([97,B.Hq,99,B.D,101,B.KU,102,B.e,111,B.A,114,B.dB,115,B.r,117,B.JO],t.e) +B.p=new A.a([99,B.D],t.e) +B.mE=new A.a([89,B.c],t.r) +B.v9=new A.a([80,B.mE],t.e) +B.eQ=new A.a([68,B.c],t.r) +B.BO=new A.a([108,B.eQ],t.e) +B.wn=new A.a([97,B.BO],t.t) +B.tL=new A.a([105,B.wn],t.V) +B.fH=new A.a([116,B.tL],t.i) +B.IR=new A.a([110,B.fH],t.J) +B.lW=new A.a([101,B.IR],t.O) +B.oq=new A.a([114,B.lW],t.l) +B.l1=new A.a([101,B.oq],t.x) +B.f5=new A.a([102,B.l1],t.Y) +B.zM=new A.a([102,B.f5],t.k) +B.tR=new A.a([105,B.zM],t._) +B.xS=new A.a([68,B.tR],t.T) +B.B4=new A.a([108,B.xS],t.E) +B.wM=new A.a([97,B.B4],t.kg) +B.CW=new A.a([116,B.wM],t.oJ) +B.yq=new A.a([59,B.d,105,B.CW],t.j) +B.zx=new A.a([121,B.B],t.e) +B.lH=new A.a([101,B.zx],t.t) +B.Bh=new A.a([108,B.lH],t.V) +B.v6=new A.a([99,B.S,112,B.yq,121,B.Bh],t.r) +B.a6=new A.a([114,B.O],t.t) +B.ac=new A.a([105,B.x],t.e) +B.ao=new A.a([100,B.ac],t.t) +B.t=new A.a([116,B.c],t.r) +B.U=new A.a([110,B.t],t.e) +B.c2=new A.a([105,B.U],t.t) +B.cw=new A.a([110,B.c2],t.V) +B.IC=new A.a([97,B.a6,101,B.ao,105,B.P,111,B.cw],t.t) +B.m=new A.a([111,B.t],t.e) +B.ff=new A.a([108,B.C],t.e) +B.B5=new A.a([108,B.ff],t.t) +B.tz=new A.a([105,B.B5],t.V) +B.ca=new A.a([68,B.m],t.t) +B.oG=new A.a([114,B.ca],t.V) +B.lD=new A.a([101,B.oG],t.i) +B.Cn=new A.a([116,B.lD],t.J) +B.Eb=new A.a([100,B.tz,110,B.Cn],t.i) +B.ab=new A.a([105,B.c],t.r) +B.ae=new A.a([117,B.B],t.e) +B.hh=new A.a([110,B.ae],t.t) +B.as=new A.a([105,B.hh],t.V) +B.Q=new A.a([108,B.ae],t.t) +B.b2=new A.a([101,B.B],t.e) +B.cy=new A.a([109,B.b2],t.t) +B.aj=new A.a([105,B.cy],t.V) +B.y5=new A.a([68,B.m,77,B.as,80,B.Q,84,B.aj],t.t) +B.lt=new A.a([101,B.y5],t.V) +B.Bv=new A.a([108,B.lt],t.i) +B.AC=new A.a([99,B.Bv],t.J) +B.nh=new A.a([114,B.AC],t.O) +B.bf=new A.a([97,B.x],t.e) +B.dP=new A.a([114,B.bf],t.t) +B.FT=new A.a([103,B.dP],t.V) +B.lx=new A.a([101,B.FT],t.i) +B.CM=new A.a([116,B.lx],t.J) +B.Jk=new A.a([110,B.CM],t.O) +B.FC=new A.a([73,B.Jk],t.l) +B.nC=new A.a([114,B.FC],t.x) +B.HZ=new A.a([117,B.nC],t.Y) +B.da=new A.a([111,B.HZ],t.k) +B.CZ=new A.a([116,B.da],t._) +B.J0=new A.a([110,B.CZ],t.T) +B.dc=new A.a([111,B.J0],t.E) +B.mJ=new A.a([67,B.dc],t.kg) +B.mj=new A.a([101,B.mJ],t.oJ) +B.z7=new A.a([115,B.mj],A.a_("a>>>>>>>>>>>>>>>>>>")) +B.uk=new A.a([105,B.z7],A.a_("a>>>>>>>>>>>>>>>>>>>")) +B.EQ=new A.a([119,B.uk],A.a_("a>>>>>>>>>>>>>>>>>>>>")) +B.he=new A.a([107,B.EQ],A.a_("a>>>>>>>>>>>>>>>>>>>>>")) +B.jG=new A.a([111,B.aO],t.t) +B.h6=new A.a([117,B.jG],t.V) +B.EH=new A.a([81,B.h6],t.i) +B.lB=new A.a([101,B.EH],t.J) +B.AQ=new A.a([108,B.lB],t.O) +B.GP=new A.a([98,B.AQ],t.l) +B.HU=new A.a([117,B.GP],t.x) +B.jA=new A.a([111,B.HU],t.Y) +B.zH=new A.a([68,B.jA,81,B.h6],t.i) +B.zs=new A.a([121,B.zH],t.J) +B.BI=new A.a([108,B.zs],t.O) +B.oA=new A.a([114,B.BI],t.l) +B.HY=new A.a([117,B.oA],t.x) +B.dE=new A.a([67,B.HY],t.Y) +B.mx=new A.a([101,B.dE],t.k) +B.DD=new A.a([99,B.he,115,B.mx],t._) +B.kl=new A.a([111,B.DD],t.T) +B.al=new A.a([59,B.d,101,B.c],t.j) +B.Jc=new A.a([110,B.al],t.r) +B.jz=new A.a([111,B.Jc],t.e) +B.bP=new A.a([101,B.U],t.t) +B.I9=new A.a([117,B.bP],t.V) +B.dQ=new A.a([114,B.I9],t.i) +B.F4=new A.a([103,B.dQ,105,B.U,116,B.da],t.t) +B.AM=new A.a([99,B.t],t.e) +B.h8=new A.a([117,B.AM],t.t) +B.Kg=new A.a([100,B.h8],t.V) +B.ke=new A.a([111,B.Kg],t.i) +B.Ab=new A.a([102,B.c,114,B.ke],t.r) +B.AE=new A.a([99,B.he],A.a_("a>>>>>>>>>>>>>>>>>>>>>>")) +B.jD=new A.a([111,B.AE],A.a_("a>>>>>>>>>>>>>>>>>>>>>>>")) +B.BE=new A.a([108,B.jD],A.a_("a>>>>>>>>>>>>>>>>>>>>>>>>")) +B.mH=new A.a([67,B.BE],A.a_("a>>>>>>>>>>>>>>>>>>>>>>>>>")) +B.o0=new A.a([114,B.mH],A.a_("a>>>>>>>>>>>>>>>>>>>>>>>>>>")) +B.mf=new A.a([101,B.o0],A.a_("a>>>>>>>>>>>>>>>>>>>>>>>>>>>")) +B.CF=new A.a([116,B.mf],A.a_("a>>>>>>>>>>>>>>>>>>>>>>>>>>>>")) +B.Jp=new A.a([110,B.CF],A.a_("a>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")) +B.xI=new A.a([108,B.jz,110,B.F4,112,B.Ab,117,B.Jp],t.e) +B.cd=new A.a([115,B.B],t.e) +B.dh=new A.a([111,B.cd],t.t) +B.w=new A.a([112,B.c],t.r) +B.au=new A.a([97,B.w],t.e) +B.Df=new A.a([59,B.d,67,B.au],t.j) +B.ve=new A.a([112,B.Df],t.r) +B.rZ=new A.a([72,B.p,79,B.v9,97,B.v6,99,B.IC,100,B.m,101,B.Eb,102,B.e,104,B.ab,105,B.nh,108,B.kl,111,B.xI,114,B.dh,115,B.r,117,B.ve],t.e) +B.rw=new A.a([104,B.a2],t.e) +B.wu=new A.a([97,B.rw],t.t) +B.p1=new A.a([114,B.wu],t.V) +B.Cb=new A.a([116,B.p1],t.i) +B.qS=new A.a([59,B.d,111,B.Cb],t.j) +B.b1=new A.a([101,B.e],t.e) +B.cs=new A.a([103,B.b1],t.t) +B.aD=new A.a([118,B.c],t.r) +B.rP=new A.a([104,B.aD],t.e) +B.yn=new A.a([103,B.cs,114,B.e,115,B.rP],t.e) +B.bg=new A.a([97,B.a6,121,B.c],t.r) +B.ph=new A.a([59,B.d,116,B.C],t.j) +B.BC=new A.a([108,B.ph],t.r) +B.ky=new A.a([65,B.K],t.i) +B.lh=new A.a([101,B.ky],t.J) +B.Bf=new A.a([108,B.lh],t.O) +B.GK=new A.a([98,B.Bf],t.l) +B.qB=new A.a([116,B.c,117,B.GK],t.r) +B.k1=new A.a([111,B.qB],t.e) +B.pE=new A.a([65,B.K,68,B.k1,71,B.a5,84,B.J],t.t) +B.B7=new A.a([108,B.pE],t.V) +B.wD=new A.a([97,B.B7],t.i) +B.Ah=new A.a([99,B.wD],t.J) +B.tK=new A.a([105,B.Ah],t.O) +B.D4=new A.a([116,B.tK],t.l) +B.ui=new A.a([105,B.D4],t.x) +B.nu=new A.a([114,B.ui],t.Y) +B.bx=new A.a([110,B.a2],t.e) +B.k2=new A.a([111,B.bx],t.t) +B.Dp=new A.a([99,B.nu,109,B.k2],t.V) +B.rl=new A.a([97,B.Dp,102,B.f5],t.i) +B.HX=new A.a([117,B.bf],t.t) +B.a0=new A.a([113,B.HX],t.V) +B.tm=new A.a([59,B.d,68,B.m,69,B.a0],t.j) +B.fN=new A.a([119,B.c],t.r) +B.jR=new A.a([111,B.fN],t.e) +B.dS=new A.a([114,B.jR],t.t) +B.G=new A.a([114,B.dS],t.V) +B.bL=new A.a([65,B.G],t.i) +B.hg=new A.a([110,B.bL],t.J) +B.t0=new A.a([116,B.c,119,B.hg],t.r) +B.jZ=new A.a([111,B.t0],t.e) +B.fC=new A.a([116,B.bL],t.J) +B.rY=new A.a([104,B.fC],t.O) +B.G_=new A.a([103,B.rY],t.l) +B.ai=new A.a([105,B.G_],t.x) +B.a8=new A.a([101,B.z],t.e) +B.Fw=new A.a([65,B.G,82,B.ai,84,B.a8],t.t) +B.Db=new A.a([116,B.Fw],t.V) +B.zS=new A.a([102,B.Db],t.i) +B.p7=new A.a([65,B.G,82,B.ai],t.i) +B.Cs=new A.a([116,B.p7],t.J) +B.zQ=new A.a([102,B.Cs],t.O) +B.dA=new A.a([101,B.zQ],t.l) +B.EE=new A.a([76,B.dA,82,B.ai],t.x) +B.Gd=new A.a([103,B.EE],t.Y) +B.J4=new A.a([110,B.Gd],t.k) +B.DU=new A.a([101,B.zS,111,B.J4],t.J) +B.Ix=new A.a([65,B.G,84,B.a8],t.t) +B.Ca=new A.a([116,B.Ix],t.V) +B.rS=new A.a([104,B.Ca],t.i) +B.FQ=new A.a([103,B.rS],t.J) +B.u0=new A.a([105,B.FQ],t.O) +B.F3=new A.a([119,B.hg],t.O) +B.aZ=new A.a([111,B.F3],t.l) +B.w3=new A.a([65,B.G,68,B.aZ],t.i) +B.vn=new A.a([112,B.w3],t.J) +B.o=new A.a([97,B.e],t.e) +B.r9=new A.a([66,B.o],t.t) +B.Bs=new A.a([108,B.r9],t.V) +B.x8=new A.a([97,B.Bs],t.i) +B.AI=new A.a([99,B.x8],t.J) +B.uh=new A.a([105,B.AI],t.O) +B.CS=new A.a([116,B.uh],t.l) +B.nQ=new A.a([114,B.CS],t.x) +B.bO=new A.a([101,B.nQ],t.Y) +B.xK=new A.a([67,B.dc,68,B.jZ,76,B.DU,82,B.u0,85,B.vn,86,B.bO],t.t) +B.mh=new A.a([101,B.xK],t.V) +B.BF=new A.a([108,B.mh],t.i) +B.GL=new A.a([98,B.BF],t.J) +B.ex=new A.a([112,B.bL],t.J) +B.uQ=new A.a([59,B.d,66,B.o,85,B.ex],t.j) +B.F2=new A.a([119,B.uQ],t.r) +B.jK=new A.a([111,B.F2],t.e) +B.o2=new A.a([114,B.jK],t.t) +B.ow=new A.a([114,B.o2],t.V) +B.df=new A.a([111,B.e],t.e) +B.fx=new A.a([116,B.df],t.t) +B.Ae=new A.a([99,B.fx],t.V) +B.bN=new A.a([101,B.Ae],t.i) +B.cp=new A.a([86,B.bN],t.J) +B.CG=new A.a([116,B.cp],t.O) +B.rB=new A.a([104,B.CG],t.l) +B.Gc=new A.a([103,B.rB],t.x) +B.u7=new A.a([105,B.Gc],t.Y) +B.lZ=new A.a([101,B.cp],t.O) +B.bR=new A.a([101,B.lZ],t.l) +B.Gz=new A.a([59,B.d,66,B.o],t.j) +B.o7=new A.a([114,B.Gz],t.r) +B.jy=new A.a([111,B.o7],t.e) +B.Cf=new A.a([116,B.jy],t.t) +B.Ak=new A.a([99,B.Cf],t.V) +B.aF=new A.a([101,B.Ak],t.i) +B.th=new A.a([82,B.u7,84,B.bR,86,B.aF],t.J) +B.CQ=new A.a([116,B.th],t.O) +B.zL=new A.a([102,B.CQ],t.l) +B.lk=new A.a([101,B.zL],t.x) +B.e7=new A.a([84,B.bR,86,B.aF],t.J) +B.CP=new A.a([116,B.e7],t.O) +B.rJ=new A.a([104,B.CP],t.l) +B.FL=new A.a([103,B.rJ],t.x) +B.ud=new A.a([105,B.FL],t.Y) +B.EO=new A.a([59,B.d,65,B.G],t.j) +B.m_=new A.a([101,B.EO],t.r) +B.dv=new A.a([101,B.m_],t.e) +B.nc=new A.a([65,B.ow,66,B.aH,76,B.lk,82,B.ud,84,B.dv,97,B.G],t.t) +B.Jl=new A.a([110,B.nc],t.V) +B.E1=new A.a([112,B.y,116,B.tm,117,B.GL,119,B.Jl],t.r) +B.T=new A.a([107,B.c],t.r) +B.jC=new A.a([111,B.T],t.e) +B.aq=new A.a([114,B.jC],t.t) +B.c9=new A.a([99,B.e,116,B.aq],t.e) +B.C0=new A.a([68,B.qS,74,B.p,83,B.p,90,B.p,97,B.yn,99,B.bg,101,B.BC,102,B.e,105,B.rl,111,B.E1,115,B.c9],t.r) +B.fZ=new A.a([71,B.c],t.r) +B.xm=new A.a([72,B.c],t.r) +B.Dk=new A.a([97,B.a6,105,B.P,121,B.c],t.r) +B.K4=new A.a([109,B.bP],t.V) +B.b3=new A.a([101,B.K4],t.i) +B.dW=new A.a([114,B.z],t.e) +B.eH=new A.a([97,B.dW],t.t) +B.HH=new A.a([117,B.eH],t.V) +B.ch=new A.a([113,B.HH],t.i) +B.v1=new A.a([83,B.ch],t.J) +B.BH=new A.a([108,B.v1],t.O) +B.B9=new A.a([108,B.BH],t.l) +B.xa=new A.a([97,B.B9],t.x) +B.hp=new A.a([109,B.xa],t.Y) +B.v0=new A.a([83,B.hp],t.k) +B.zt=new A.a([121,B.v0],t._) +B.oM=new A.a([114,B.zt],t.T) +B.lX=new A.a([101,B.oM],t.E) +B.e0=new A.a([83,B.hp,86,B.lX],t.k) +B.zp=new A.a([121,B.e0],t._) +B.Cg=new A.a([116,B.zp],t.T) +B.E2=new A.a([97,B.r,112,B.Cg],t.t) +B.cl=new A.a([108,B.O],t.t) +B.tT=new A.a([105,B.cl],t.V) +B.eS=new A.a([115,B.tT],t.i) +B.BT=new A.a([59,B.d,84,B.J],t.j) +B.fm=new A.a([108,B.BT],t.r) +B.V=new A.a([109,B.c],t.r) +B.HE=new A.a([117,B.V],t.e) +B.ek=new A.a([105,B.HE],t.t) +B.op=new A.a([114,B.ek],t.V) +B.GF=new A.a([98,B.op],t.i) +B.us=new A.a([105,B.GF],t.J) +B.fg=new A.a([108,B.us],t.O) +B.pt=new A.a([97,B.fm,105,B.fg],t.e) +B.I_=new A.a([117,B.pt],t.t) +B.Ep=new A.a([99,B.e,105,B.V],t.e) +B.Ck=new A.a([116,B.B],t.e) +B.eY=new A.a([115,B.Ck],t.t) +B.cf=new A.a([69,B.c],t.r) +B.BJ=new A.a([108,B.cf],t.e) +B.x2=new A.a([97,B.BJ],t.t) +B.ue=new A.a([105,B.x2],t.V) +B.Cq=new A.a([116,B.ue],t.i) +B.IG=new A.a([110,B.Cq],t.J) +B.l5=new A.a([101,B.IG],t.O) +B.JD=new A.a([110,B.l5],t.l) +B.jQ=new A.a([111,B.JD],t.x) +B.EB=new A.a([105,B.eY,112,B.jQ],t.V) +B.ym=new A.a([78,B.fZ,84,B.xm,97,B.K,99,B.Dk,100,B.m,102,B.e,103,B.a5,108,B.b3,109,B.E2,111,B.av,112,B.eS,113,B.I_,115,B.Ep,116,B.C,117,B.an,120,B.EB],t.e) +B.Kp=new A.a([100,B.e0],t._) +B.ma=new A.a([101,B.Kp],t.T) +B.Bu=new A.a([108,B.ma],t.E) +B.Bm=new A.a([108,B.Bu],t.kg) +B.cn=new A.a([108,B.x],t.e) +B.kx=new A.a([65,B.cn],t.t) +B.bW=new A.a([114,B.y],t.e) +B.bn=new A.a([116,B.bW],t.t) +B.oz=new A.a([114,B.bn],t.V) +B.kY=new A.a([101,B.oz],t.i) +B.tS=new A.a([105,B.kY],t.J) +B.nw=new A.a([114,B.tS],t.O) +B.Fk=new A.a([112,B.y,114,B.kx,117,B.nw],t.e) +B.kT=new A.a([99,B.D,102,B.e,105,B.Bm,111,B.Fk,115,B.r],t.e) +B.br=new A.a([59,B.d,100,B.c],t.j) +B.wp=new A.a([97,B.br],t.r) +B.hl=new A.a([109,B.wp],t.e) +B.JQ=new A.a([109,B.hl],t.t) +B.Fx=new A.a([101,B.ao,105,B.P,121,B.c],t.r) +B.Z=new A.a([101,B.cd],t.t) +B.qz=new A.a([59,B.d,76,B.Z],t.j) +B.Bn=new A.a([108,B.qz],t.r) +B.w8=new A.a([97,B.Bn],t.e) +B.HI=new A.a([117,B.w8],t.t) +B.A1=new A.a([113,B.HI],t.V) +B.f2=new A.a([69,B.a0],t.i) +B.BM=new A.a([108,B.f2],t.J) +B.Bo=new A.a([108,B.BM],t.O) +B.bu=new A.a([117,B.Bo],t.l) +B.fD=new A.a([116,B.b1],t.t) +B.wX=new A.a([97,B.fD],t.V) +B.lf=new A.a([101,B.wX],t.i) +B.aG=new A.a([114,B.lf],t.J) +B.D0=new A.a([116,B.f2],t.J) +B.IL=new A.a([110,B.D0],t.O) +B.wV=new A.a([97,B.IL],t.l) +B.az=new A.a([108,B.wV],t.x) +B.pD=new A.a([69,B.A1,70,B.bu,71,B.aG,76,B.Z,83,B.az,84,B.J],t.V) +B.nY=new A.a([114,B.pD],t.i) +B.lg=new A.a([101,B.nY],t.J) +B.Cc=new A.a([116,B.lg],t.O) +B.xd=new A.a([97,B.Cc],t.l) +B.lE=new A.a([101,B.xd],t.x) +B.Dw=new A.a([74,B.p,84,B.c,97,B.JQ,98,B.aH,99,B.Fx,100,B.m,102,B.e,103,B.c,111,B.A,114,B.lE,115,B.r,116,B.c],t.r) +B.xU=new A.a([68,B.p],t.t) +B.ux=new A.a([82,B.xU],t.V) +B.lQ=new A.a([101,B.T],t.e) +B.xs=new A.a([99,B.lQ,116,B.c],t.r) +B.aJ=new A.a([105,B.P],t.t) +B.AG=new A.a([99,B.z],t.e) +B.wI=new A.a([97,B.AG],t.t) +B.vf=new A.a([112,B.wI],t.V) +B.ak=new A.a([83,B.vf],t.i) +B.D8=new A.a([116,B.ak],t.J) +B.o8=new A.a([114,B.D8],t.O) +B.lm=new A.a([101,B.o8],t.l) +B.GI=new A.a([98,B.lm],t.x) +B.B6=new A.a([108,B.GI],t.Y) +B.aP=new A.a([110,B.z],t.e) +B.ba=new A.a([105,B.aP],t.t) +B.ed=new A.a([76,B.ba],t.V) +B.Bt=new A.a([108,B.ed],t.i) +B.wx=new A.a([97,B.Bt],t.J) +B.CI=new A.a([116,B.wx],t.O) +B.J6=new A.a([110,B.CI],t.l) +B.jT=new A.a([111,B.J6],t.x) +B.p5=new A.a([122,B.jT],t.Y) +B.u9=new A.a([105,B.p5],t.k) +B.Hx=new A.a([112,B.y,114,B.u9],t.e) +B.K3=new A.a([109,B.w],t.e) +B.HO=new A.a([117,B.K3],t.t) +B.xo=new A.a([72,B.HO],t.V) +B.J7=new A.a([110,B.xo],t.i) +B.EY=new A.a([119,B.J7],t.J) +B.k6=new A.a([111,B.EY],t.O) +B.F6=new A.a([68,B.k6,69,B.a0],t.i) +B.vD=new A.a([112,B.F6],t.J) +B.hq=new A.a([109,B.vD],t.O) +B.y8=new A.a([65,B.ux,97,B.xs,99,B.aJ,102,B.e,105,B.B6,111,B.Hx,115,B.c9,117,B.hq],t.e) +B.FB=new A.a([73,B.c],t.r) +B.zv=new A.a([121,B.FB],t.e) +B.nN=new A.a([114,B.zv],t.t) +B.wT=new A.a([97,B.nN],t.V) +B.IV=new A.a([110,B.wT],t.i) +B.tP=new A.a([105,B.IV],t.J) +B.KB=new A.a([99,B.e,103,B.tP],t.e) +B.tM=new A.a([105,B.b2],t.t) +B.fp=new A.a([108,B.tM],t.V) +B.y2=new A.a([59,B.d,97,B.KB,112,B.fp],t.j) +B.kZ=new A.a([101,B.fb],t.J) +B.eW=new A.a([115,B.kZ],t.O) +B.Ei=new A.a([103,B.dP,114,B.eW],t.V) +B.xD=new A.a([59,B.d,101,B.Ei],t.j) +B.hn=new A.a([109,B.C],t.e) +B.cx=new A.a([109,B.hn],t.t) +B.jX=new A.a([111,B.cx],t.V) +B.p8=new A.a([67,B.jX,84,B.aj],t.i) +B.lc=new A.a([101,B.p8],t.J) +B.Bi=new A.a([108,B.lc],t.O) +B.GG=new A.a([98,B.Bi],t.l) +B.ur=new A.a([105,B.GG],t.x) +B.z1=new A.a([115,B.ur],t.Y) +B.uo=new A.a([105,B.z1],t.k) +B.Fc=new A.a([116,B.xD,118,B.uo],t.r) +B.yl=new A.a([103,B.O,112,B.y,116,B.C],t.e) +B.e1=new A.a([107,B.p,109,B.x],t.e) +B.KF=new A.a([69,B.p,74,B.a1,79,B.p,97,B.K,99,B.a_,100,B.m,102,B.e,103,B.a5,109,B.y2,110,B.Fc,111,B.yl,115,B.r,116,B.J,117,B.e1],t.r) +B.om=new A.a([114,B.p],t.t) +B.fI=new A.a([99,B.e,101,B.om],t.e) +B.hd=new A.a([107,B.p],t.t) +B.px=new A.a([99,B.a_,102,B.e,111,B.A,115,B.fI,117,B.hd],t.e) +B.vd=new A.a([112,B.C],t.e) +B.ew=new A.a([112,B.vd],t.t) +B.di=new A.a([101,B.ao,121,B.c],t.r) +B.E7=new A.a([72,B.p,74,B.p,97,B.ew,99,B.di,102,B.e,111,B.A,115,B.r],t.e) +B.Kd=new A.a([100,B.C],t.e) +B.h1=new A.a([98,B.Kd],t.t) +B.lb=new A.a([101,B.bn],t.V) +B.Af=new A.a([99,B.lb],t.i) +B.wz=new A.a([97,B.Af],t.J) +B.Bx=new A.a([108,B.wz],t.O) +B.uH=new A.a([99,B.S,109,B.h1,110,B.R,112,B.Bx,114,B.e],t.e) +B.aN=new A.a([97,B.a6,101,B.ao,121,B.c],t.r) +B.aE=new A.a([101,B.t],t.e) +B.Ij=new A.a([107,B.aE],t.t) +B.Av=new A.a([99,B.Ij],t.V) +B.wH=new A.a([97,B.Av],t.i) +B.oO=new A.a([114,B.wH],t.J) +B.r6=new A.a([66,B.oO],t.O) +B.m0=new A.a([101,B.r6],t.l) +B.fk=new A.a([108,B.m0],t.x) +B.fU=new A.a([103,B.fk],t.Y) +B.tn=new A.a([59,B.d,66,B.o,82,B.ai],t.j) +B.EP=new A.a([119,B.tn],t.r) +B.ka=new A.a([111,B.EP],t.e) +B.ns=new A.a([114,B.ka],t.t) +B.zA=new A.a([110,B.fU,114,B.ns],t.V) +B.Bk=new A.a([108,B.aL],t.V) +B.tD=new A.a([105,B.Bk],t.i) +B.dC=new A.a([101,B.tD],t.J) +B.GJ=new A.a([98,B.fk],t.Y) +B.IQ=new A.a([110,B.e7],t.O) +B.y7=new A.a([117,B.GJ,119,B.IQ],t.l) +B.d8=new A.a([111,B.y7],t.x) +B.db=new A.a([111,B.df],t.t) +B.fd=new A.a([108,B.db],t.V) +B.Dl=new A.a([65,B.G,86,B.bN],t.i) +B.CO=new A.a([116,B.Dl],t.J) +B.rF=new A.a([104,B.CO],t.O) +B.FK=new A.a([103,B.rF],t.l) +B.tO=new A.a([105,B.FK],t.x) +B.rj=new A.a([59,B.d,65,B.G,86,B.bN],t.j) +B.m8=new A.a([101,B.rj],t.r) +B.pu=new A.a([59,B.d,66,B.o,69,B.a0],t.j) +B.lT=new A.a([101,B.pu],t.r) +B.B2=new A.a([108,B.lT],t.e) +B.G2=new A.a([103,B.B2],t.t) +B.IU=new A.a([110,B.G2],t.V) +B.wE=new A.a([97,B.IU],t.i) +B.eg=new A.a([105,B.wE],t.J) +B.hf=new A.a([101,B.m8,114,B.eg],t.e) +B.Jj=new A.a([110,B.cp],t.O) +B.ET=new A.a([119,B.Jj],t.l) +B.jH=new A.a([111,B.ET],t.x) +B.yf=new A.a([68,B.jH,84,B.bR,86,B.aF],t.J) +B.ey=new A.a([112,B.yf],t.O) +B.c7=new A.a([97,B.G],t.i) +B.ft=new A.a([116,B.c7],t.J) +B.rQ=new A.a([104,B.ft],t.O) +B.fR=new A.a([103,B.rQ],t.l) +B.ah=new A.a([105,B.fR],t.x) +B.w_=new A.a([65,B.zA,67,B.dC,68,B.d8,70,B.fd,82,B.tO,84,B.hf,85,B.ey,86,B.aF,97,B.G,114,B.ah],t.t) +B.D2=new A.a([116,B.w_],t.V) +B.h_=new A.a([71,B.aG],t.O) +B.BK=new A.a([108,B.h_],t.l) +B.wy=new A.a([97,B.BK],t.x) +B.HN=new A.a([117,B.wy],t.Y) +B.A3=new A.a([113,B.HN],t.k) +B.pB=new A.a([69,B.A3,70,B.bu,71,B.aG,76,B.Z,83,B.az,84,B.J],t.V) +B.ze=new A.a([115,B.pB],t.i) +B.Es=new A.a([102,B.D2,115,B.ze],t.i) +B.f4=new A.a([102,B.ft],t.O) +B.xy=new A.a([59,B.d,101,B.f4],t.j) +B.aR=new A.a([100,B.m],t.t) +B.un=new A.a([105,B.aR],t.V) +B.zZ=new A.a([97,B.G,114,B.ah],t.i) +B.fF=new A.a([116,B.zZ],t.J) +B.f3=new A.a([102,B.fF],t.O) +B.dy=new A.a([101,B.f3],t.l) +B.r0=new A.a([76,B.dA,82,B.ai,108,B.dy,114,B.ah],t.x) +B.G3=new A.a([103,B.r0],t.Y) +B.zN=new A.a([102,B.fC],t.O) +B.bQ=new A.a([101,B.zN],t.l) +B.EF=new A.a([76,B.bQ,82,B.ai],t.x) +B.nD=new A.a([114,B.EF],t.Y) +B.dz=new A.a([101,B.nD],t.k) +B.qC=new A.a([110,B.G3,112,B.y,119,B.dz],t.e) +B.mN=new A.a([99,B.e,104,B.c,116,B.aq],t.r) +B.Gg=new A.a([74,B.p,84,B.c,97,B.uH,99,B.aN,101,B.Es,102,B.e,108,B.xy,109,B.un,111,B.qC,115,B.mN,116,B.c],t.r) +B.JV=new A.a([109,B.ak],t.J) +B.HV=new A.a([117,B.JV],t.O) +B.eo=new A.a([105,B.HV],t.l) +B.IZ=new A.a([110,B.bn],t.V) +B.tG=new A.a([105,B.IZ],t.i) +B.AP=new A.a([108,B.tG],t.J) +B.BW=new A.a([100,B.eo,108,B.AP],t.O) +B.va=new A.a([80,B.Q],t.V) +B.yW=new A.a([115,B.va],t.i) +B.I2=new A.a([117,B.yW],t.J) +B.IW=new A.a([110,B.I2],t.O) +B.Gj=new A.a([97,B.w,99,B.D,101,B.BW,102,B.e,105,B.IW,111,B.A,115,B.r,117,B.c],t.r) +B.Kh=new A.a([100,B.eo],t.x) +B.mu=new A.a([101,B.Kh],t.Y) +B.Ip=new A.a([107,B.ak],t.J) +B.ep=new A.a([99,B.Ip,110,B.ak],t.J) +B.tV=new A.a([105,B.ep],t.O) +B.rX=new A.a([104,B.tV],t.l) +B.Js=new A.a([110,B.ak],t.J) +B.um=new A.a([105,B.Js],t.O) +B.rR=new A.a([104,B.um],t.l) +B.fQ=new A.a([84,B.rR],t.x) +B.zu=new A.a([121,B.fQ],t.Y) +B.o6=new A.a([114,B.zu],t.k) +B.ml=new A.a([101,B.o6],t._) +B.kQ=new A.a([77,B.mu,84,B.rX,86,B.ml],t.x) +B.lU=new A.a([101,B.kQ],t.Y) +B.kF=new A.a([118,B.lU],t.k) +B.u8=new A.a([105,B.kF],t._) +B.CT=new A.a([116,B.u8],t.T) +B.wa=new A.a([97,B.CT],t.E) +B.ov=new A.a([114,B.h_],t.l) +B.lJ=new A.a([101,B.ov],t.x) +B.Ct=new A.a([116,B.lJ],t.Y) +B.x5=new A.a([97,B.Ct],t.k) +B.lC=new A.a([101,B.x5],t._) +B.oh=new A.a([114,B.lC],t.T) +B.tr=new A.a([76,B.Z],t.V) +B.zd=new A.a([115,B.tr],t.i) +B.yJ=new A.a([115,B.zd],t.J) +B.mz=new A.a([101,B.yJ],t.O) +B.DP=new A.a([71,B.oh,76,B.mz],t.l) +B.Ki=new A.a([100,B.DP],t.x) +B.lP=new A.a([101,B.Ki],t.Y) +B.fA=new A.a([116,B.lP],t.k) +B.IA=new A.a([103,B.wa,115,B.fA,119,B.ed],t.i) +B.wK=new A.a([97,B.T],t.e) +B.mr=new A.a([101,B.wK],t.t) +B.o1=new A.a([114,B.mr],t.V) +B.G4=new A.a([103,B.ak],t.J) +B.IX=new A.a([110,B.G4],t.O) +B.uf=new A.a([105,B.IX],t.l) +B.In=new A.a([107,B.uf],t.x) +B.wo=new A.a([97,B.In],t.Y) +B.m7=new A.a([101,B.wo],t.k) +B.oP=new A.a([114,B.m7],t._) +B.r7=new A.a([66,B.oP],t.T) +B.FV=new A.a([103,B.dQ],t.J) +B.Jm=new A.a([110,B.FV],t.O) +B.mK=new A.a([67,B.au],t.t) +B.vr=new A.a([112,B.mK],t.V) +B.Di=new A.a([111,B.Jm,117,B.vr],t.i) +B.Eg=new A.a([86,B.bO],t.k) +B.m1=new A.a([101,B.Eg],t._) +B.Ba=new A.a([108,B.m1],t.T) +B.GN=new A.a([98,B.Ba],t.E) +B.HK=new A.a([117,B.GN],t.kg) +B.k7=new A.a([111,B.HK],t.oJ) +B.xg=new A.a([97,B.fm],t.e) +B.HB=new A.a([117,B.xg],t.t) +B.ua=new A.a([105,B.eY],t.V) +B.kr=new A.a([108,B.b3,113,B.HB,120,B.ua],t.V) +B.KD=new A.a([59,B.d,69,B.a0,70,B.bu,71,B.aG,76,B.Z,83,B.az,84,B.J],t.j) +B.oI=new A.a([114,B.KD],t.r) +B.mw=new A.a([101,B.oI],t.e) +B.CR=new A.a([116,B.mw],t.t) +B.x1=new A.a([97,B.CR],t.V) +B.mo=new A.a([101,B.x1],t.i) +B.ok=new A.a([114,B.mo],t.J) +B.I6=new A.a([117,B.hq],t.l) +B.oZ=new A.a([114,B.eg],t.O) +B.Fn=new A.a([84,B.oZ],t.l) +B.fB=new A.a([116,B.Fn],t.x) +B.pc=new A.a([59,B.d,69,B.a0,71,B.aG,76,B.Z,83,B.az,84,B.J],t.j) +B.zh=new A.a([115,B.pc],t.r) +B.Et=new A.a([102,B.fB,115,B.zh],t.e) +B.mi=new A.a([101,B.Et],t.t) +B.z6=new A.a([115,B.fA],t._) +B.mm=new A.a([101,B.z6],t.T) +B.Gv=new A.a([59,B.d,69,B.a0,83,B.az],t.j) +B.yP=new A.a([115,B.Gv],t.r) +B.lG=new A.a([101,B.yP],t.e) +B.Kq=new A.a([100,B.lG],t.t) +B.l8=new A.a([101,B.Kq],t.V) +B.Am=new A.a([99,B.l8],t.i) +B.mt=new A.a([101,B.Am],t.J) +B.ox=new A.a([114,B.mt],t.O) +B.Bd=new A.a([108,B.b3],t.J) +B.zC=new A.a([69,B.Bd],t.O) +B.me=new A.a([101,B.zC],t.l) +B.yR=new A.a([115,B.me],t.x) +B.oT=new A.a([114,B.yR],t.Y) +B.lL=new A.a([101,B.oT],t.k) +B.kG=new A.a([118,B.lL],t._) +B.rC=new A.a([104,B.fB],t.Y) +B.G9=new A.a([103,B.rC],t.k) +B.Fg=new A.a([101,B.kG,105,B.G9],t._) +B.uT=new A.a([59,B.d,69,B.a0],t.j) +B.Cr=new A.a([116,B.uT],t.r) +B.du=new A.a([101,B.Cr],t.e) +B.ce=new A.a([115,B.du],t.t) +B.dM=new A.a([114,B.ce],t.V) +B.dt=new A.a([101,B.dM],t.i) +B.KO=new A.a([98,B.ce,112,B.dt],t.V) +B.h7=new A.a([117,B.KO],t.i) +B.v2=new A.a([83,B.h7],t.J) +B.ly=new A.a([101,B.v2],t.O) +B.oc=new A.a([114,B.ly],t.l) +B.wF=new A.a([97,B.oc],t.x) +B.HS=new A.a([117,B.wF],t.Y) +B.t_=new A.a([59,B.d,69,B.a0,83,B.az,84,B.J],t.j) +B.eX=new A.a([115,B.t_],t.r) +B.Kc=new A.a([100,B.eX],t.e) +B.m2=new A.a([101,B.Kc],t.t) +B.ds=new A.a([101,B.m2],t.V) +B.Ai=new A.a([99,B.ds],t.i) +B.v_=new A.a([98,B.ce,99,B.Ai,112,B.dt],t.V) +B.xN=new A.a([113,B.HS,117,B.v_],t.i) +B.De=new A.a([59,B.d,69,B.a0,70,B.bu,84,B.J],t.j) +B.md=new A.a([101,B.De],t.r) +B.Kk=new A.a([100,B.md],t.e) +B.fl=new A.a([108,B.Kk],t.t) +B.tx=new A.a([105,B.fl],t.V) +B.y6=new A.a([59,B.d,67,B.Di,68,B.k7,69,B.kr,71,B.ok,72,B.I6,76,B.mi,78,B.mm,80,B.ox,82,B.Fg,83,B.xN,84,B.tx,86,B.bO],t.j) +B.t7=new A.a([66,B.o1,110,B.r7,112,B.y,116,B.y6],t.r) +B.uO=new A.a([74,B.p,97,B.K,99,B.aN,101,B.IA,102,B.e,111,B.t7,115,B.r,116,B.J,117,B.c],t.r) +B.eC=new A.a([97,B.ad],t.e) +B.ck=new A.a([108,B.eC],t.t) +B.h2=new A.a([98,B.ck],t.V) +B.fS=new A.a([103,B.C],t.e) +B.Aq=new A.a([99,B.a6],t.V) +B.tj=new A.a([97,B.r,101,B.fS,105,B.Aq],t.t) +B.JG=new A.a([110,B.dE],t.k) +B.ms=new A.a([101,B.JG],t._) +B.tc=new A.a([99,B.e,108,B.I],t.e) +B.xP=new A.a([108,B.aQ,109,B.b2],t.t) +B.tw=new A.a([105,B.xP],t.V) +B.rc=new A.a([101,B.c,107,B.aE],t.r) +B.Al=new A.a([99,B.rc],t.e) +B.x7=new A.a([97,B.Al],t.t) +B.zX=new A.a([97,B.e,114,B.x7],t.e) +B.yM=new A.a([115,B.c1],t.t) +B.lq=new A.a([101,B.yM],t.V) +B.ry=new A.a([104,B.lq],t.i) +B.D5=new A.a([116,B.ry],t.J) +B.Jo=new A.a([110,B.D5],t.O) +B.lz=new A.a([101,B.Jo],t.l) +B.np=new A.a([114,B.lz],t.x) +B.wc=new A.a([97,B.np],t.Y) +B.Ea=new A.a([66,B.zX,80,B.wc],t.t) +B.oy=new A.a([114,B.Ea],t.V) +B.dw=new A.a([101,B.oy],t.i) +B.xi=new A.a([69,B.a1,97,B.K,99,B.a_,100,B.h2,102,B.e,103,B.a5,109,B.tj,111,B.A,112,B.ms,114,B.c,115,B.tc,116,B.tw,117,B.an,118,B.dw],t.r) +B.oj=new A.a([114,B.fH],t.J) +B.y0=new A.a([77,B.as],t.i) +B.z_=new A.a([115,B.y0],t.J) +B.HD=new A.a([117,B.z_],t.O) +B.wR=new A.a([97,B.aP],t.t) +B.AS=new A.a([108,B.wR],t.V) +B.vE=new A.a([112,B.AS],t.i) +B.mA=new A.a([101,B.vE],t.J) +B.ny=new A.a([114,B.mA],t.O) +B.wA=new A.a([97,B.ny],t.l) +B.Aj=new A.a([99,B.wA],t.x) +B.Jb=new A.a([110,B.Aj],t.Y) +B.ED=new A.a([105,B.Jb,112,B.y],t.e) +B.lS=new A.a([101,B.eX],t.e) +B.Kr=new A.a([100,B.lS],t.t) +B.lK=new A.a([101,B.Kr],t.V) +B.AJ=new A.a([99,B.lK],t.i) +B.ho=new A.a([109,B.z],t.e) +B.t4=new A.a([59,B.d,97,B.x],t.j) +B.Jq=new A.a([110,B.t4],t.r) +B.kj=new A.a([111,B.Jq],t.e) +B.tI=new A.a([105,B.kj],t.t) +B.Cw=new A.a([116,B.tI],t.V) +B.nF=new A.a([114,B.Cw],t.i) +B.jF=new A.a([111,B.nF],t.J) +B.vP=new A.a([100,B.h8,112,B.jF],t.V) +B.pa=new A.a([59,B.d,101,B.AJ,105,B.ho,111,B.vP],t.j) +B.fL=new A.a([99,B.e,105,B.c],t.r) +B.xZ=new A.a([97,B.oj,99,B.D,102,B.e,104,B.ab,105,B.c,108,B.HD,111,B.ED,114,B.pa,115,B.fL],t.r) +B.Fo=new A.a([84,B.c],t.r) +B.kM=new A.a([79,B.Fo],t.e) +B.r5=new A.a([85,B.kM,102,B.e,111,B.A,115,B.r],t.e) +B.q=new A.a([114,B.e],t.e) +B.M=new A.a([97,B.q],t.t) +B.pj=new A.a([59,B.d,116,B.x],t.j) +B.nk=new A.a([114,B.pj],t.r) +B.It=new A.a([99,B.S,110,B.R,114,B.nk],t.e) +B.ug=new A.a([105,B.fg],t.l) +B.hb=new A.a([117,B.ug],t.x) +B.xx=new A.a([108,B.b3,113,B.hb],t.J) +B.f9=new A.a([113,B.hb],t.Y) +B.zD=new A.a([69,B.f9],t.k) +B.vy=new A.a([112,B.zD],t._) +B.xp=new A.a([69,B.xx,85,B.vy],t.O) +B.lr=new A.a([101,B.xp],t.l) +B.zf=new A.a([115,B.lr],t.x) +B.od=new A.a([114,B.zf],t.Y) +B.lw=new A.a([101,B.od],t.k) +B.C4=new A.a([59,B.d,118,B.lw],t.j) +B.a4=new A.a([111,B.c],t.r) +B.Dt=new A.a([59,B.d,66,B.o,76,B.bQ],t.j) +B.EX=new A.a([119,B.Dt],t.r) +B.jN=new A.a([111,B.EX],t.e) +B.o_=new A.a([114,B.jN],t.t) +B.zz=new A.a([110,B.fU,114,B.o_],t.V) +B.zU=new A.a([65,B.zz,67,B.dC,68,B.d8,70,B.fd,84,B.hf,85,B.ey,86,B.aF,97,B.G],t.t) +B.CJ=new A.a([116,B.zU],t.V) +B.rN=new A.a([104,B.CJ],t.i) +B.Ga=new A.a([103,B.rN],t.J) +B.vw=new A.a([112,B.fp],t.i) +B.JK=new A.a([109,B.vw],t.J) +B.FA=new A.a([73,B.JK],t.O) +B.Ko=new A.a([100,B.FA],t.l) +B.IM=new A.a([110,B.Ko],t.x) +B.Kt=new A.a([112,B.y,117,B.IM],t.e) +B.Dn=new A.a([99,B.e,104,B.c],t.r) +B.zn=new A.a([121,B.b5],t.t) +B.x4=new A.a([97,B.zn],t.V) +B.Bb=new A.a([108,B.x4],t.i) +B.lo=new A.a([101,B.Bb],t.J) +B.xT=new A.a([68,B.lo],t.O) +B.ll=new A.a([101,B.xT],t.l) +B.AX=new A.a([108,B.ll],t.x) +B.vZ=new A.a([66,B.M,69,B.fZ,97,B.It,99,B.aN,101,B.C4,102,B.e,104,B.a4,105,B.Ga,111,B.Kt,114,B.ah,115,B.Dn,117,B.AX],t.r) +B.xn=new A.a([72,B.p],t.t) +B.DQ=new A.a([67,B.xn,99,B.D],t.e) +B.Fq=new A.a([84,B.p],t.t) +B.pO=new A.a([70,B.Fq],t.V) +B.q1=new A.a([59,B.d,97,B.a6,101,B.ao,105,B.P,121,B.c],t.j) +B.vV=new A.a([68,B.aZ,76,B.bQ,82,B.ai,85,B.ex],t.O) +B.Cj=new A.a([116,B.vV],t.l) +B.oK=new A.a([114,B.Cj],t.x) +B.kd=new A.a([111,B.oK],t.Y) +B.fW=new A.a([103,B.hn],t.t) +B.bl=new A.a([108,B.z],t.e) +B.Ax=new A.a([99,B.bl],t.t) +B.nZ=new A.a([114,B.Ax],t.V) +B.ty=new A.a([105,B.nZ],t.i) +B.mI=new A.a([67,B.ty],t.J) +B.Bl=new A.a([108,B.mI],t.O) +B.AV=new A.a([108,B.Bl],t.l) +B.wW=new A.a([97,B.AV],t.x) +B.or=new A.a([114,B.eW],t.l) +B.m9=new A.a([101,B.or],t.x) +B.Cp=new A.a([116,B.m9],t.Y) +B.IJ=new A.a([110,B.Cp],t.k) +B.Je=new A.a([110,B.ee],t.V) +B.ru=new A.a([59,B.d,73,B.IJ,83,B.h7,85,B.Je],t.j) +B.ld=new A.a([101,B.ru],t.r) +B.oC=new A.a([114,B.ld],t.e) +B.wQ=new A.a([97,B.oC],t.t) +B.BZ=new A.a([114,B.t,117,B.wQ],t.e) +B.mU=new A.a([59,B.d,115,B.du],t.j) +B.eG=new A.a([97,B.t],t.e) +B.rW=new A.a([104,B.eG],t.t) +B.Fp=new A.a([84,B.rW],t.V) +B.Dm=new A.a([99,B.ds,104,B.Fp],t.i) +B.K9=new A.a([59,B.d,101,B.dM,115,B.aE],t.j) +B.xH=new A.a([98,B.mU,99,B.Dm,109,B.c,112,B.K9],t.r) +B.KE=new A.a([72,B.DQ,79,B.pO,97,B.K,99,B.q1,102,B.e,104,B.kd,105,B.fW,109,B.wW,111,B.A,113,B.BZ,115,B.r,116,B.o,117,B.xH],t.r) +B.xV=new A.a([78,B.c],t.r) +B.uw=new A.a([82,B.xV],t.e) +B.kL=new A.a([79,B.uw],t.t) +B.xR=new A.a([68,B.cf],t.e) +B.kw=new A.a([65,B.xR],t.t) +B.DH=new A.a([72,B.p,99,B.D],t.e) +B.Fi=new A.a([98,B.c,117,B.c],t.r) +B.d7=new A.a([111,B.dW],t.t) +B.zO=new A.a([102,B.d7],t.V) +B.mq=new A.a([101,B.zO],t.i) +B.Gm=new A.a([114,B.mq,116,B.C],t.e) +B.Ff=new A.a([101,B.Gm,105,B.ep],t.t) +B.m4=new A.a([101,B.ca],t.V) +B.B1=new A.a([108,B.m4],t.i) +B.vq=new A.a([112,B.B1],t.J) +B.tC=new A.a([105,B.vq],t.O) +B.uL=new A.a([72,B.kL,82,B.kw,83,B.DH,97,B.Fi,99,B.aN,102,B.e,104,B.Ff,105,B.fl,111,B.A,114,B.tC,115,B.c9],t.e) +B.ar=new A.a([105,B.e],t.e) +B.bj=new A.a([99,B.ar],t.t) +B.qR=new A.a([59,B.d,111,B.bj],t.j) +B.oQ=new A.a([114,B.qR],t.r) +B.Hs=new A.a([99,B.S,114,B.oQ],t.e) +B.DR=new A.a([99,B.D,101,B.b0],t.e) +B.dO=new A.a([114,B.DR],t.t) +B.xJ=new A.a([59,B.d,80,B.Q],t.j) +B.IH=new A.a([110,B.xJ],t.r) +B.ki=new A.a([111,B.IH],t.e) +B.EI=new A.a([100,B.dw,105,B.ki],t.t) +B.Iv=new A.a([59,B.d,66,B.o,68,B.aZ],t.j) +B.EV=new A.a([119,B.Iv],t.r) +B.k5=new A.a([111,B.EV],t.e) +B.nT=new A.a([114,B.k5],t.t) +B.oL=new A.a([114,B.nT],t.V) +B.Jr=new A.a([110,B.c7],t.J) +B.EU=new A.a([119,B.Jr],t.O) +B.de=new A.a([111,B.EU],t.l) +B.n8=new A.a([59,B.d,108,B.O],t.j) +B.uu=new A.a([105,B.n8],t.r) +B.zl=new A.a([65,B.oL,68,B.aZ,69,B.f9,84,B.dv,97,B.G,100,B.de,112,B.dz,115,B.uu],t.e) +B.y4=new A.a([97,B.Hs,98,B.dO,99,B.a_,100,B.h2,102,B.e,103,B.a5,109,B.eL,110,B.EI,111,B.av,112,B.zl,114,B.aL,115,B.r,116,B.J,117,B.an],t.e) +B.b6=new A.a([59,B.d,108,B.c],t.j) +B.rK=new A.a([104,B.b6],t.r) +B.z5=new A.a([115,B.rK],t.e) +B.xb=new A.a([97,B.z5],t.t) +B.wg=new A.a([97,B.fx],t.V) +B.nH=new A.a([114,B.wg],t.i) +B.w9=new A.a([97,B.nH],t.J) +B.vp=new A.a([112,B.w9],t.O) +B.le=new A.a([101,B.vp],t.l) +B.EC=new A.a([66,B.o,76,B.ba,83,B.le,84,B.J],t.t) +B.AW=new A.a([108,B.EC],t.V) +B.wZ=new A.a([97,B.AW],t.i) +B.AL=new A.a([99,B.wZ],t.J) +B.yo=new A.a([59,B.d,105,B.AL],t.j) +B.xL=new A.a([98,B.o,116,B.yo,121,B.fQ],t.r) +B.Iu=new A.a([101,B.c,114,B.xL],t.r) +B.Km=new A.a([100,B.I],t.V) +B.F7=new A.a([68,B.I,98,B.o,99,B.D,100,B.xb,101,B.Iu,102,B.e,111,B.A,115,B.r,118,B.Km],t.e) +B.fV=new A.a([103,B.z],t.e) +B.hs=new A.a([100,B.fV],t.t) +B.p9=new A.a([99,B.aJ,101,B.hs,102,B.e,111,B.A,115,B.r],t.e) +B.rq=new A.a([102,B.e,105,B.c,111,B.A,115,B.r],t.r) +B.mP=new A.a([65,B.p,73,B.p,85,B.p,97,B.K,99,B.a_,102,B.e,111,B.A,115,B.r,117,B.an],t.e) +B.rE=new A.a([104,B.ak],t.J) +B.D3=new A.a([116,B.rE],t.O) +B.Kv=new A.a([100,B.D3],t.l) +B.tW=new A.a([105,B.Kv],t.x) +B.zG=new A.a([87,B.tW],t.Y) +B.jY=new A.a([111,B.zG],t.k) +B.Gl=new A.a([114,B.jY,116,B.C],t.e) +B.uK=new A.a([72,B.p,97,B.K,99,B.bg,100,B.m,101,B.Gl,102,B.e,111,B.A,115,B.r],t.e) +B.qu=new A.a([59,B.d,69,B.c,100,B.c,105,B.P,117,B.aO,121,B.c],t.j) +B.bq=new A.a([59,B.d,114,B.c],t.j) +B.f0=new A.a([121,B.V],t.e) +B.za=new A.a([115,B.f0],t.t) +B.yy=new A.a([102,B.za,112,B.ag],t.e) +B.AN=new A.a([101,B.yy,112,B.ea],t.t) +B.te=new A.a([99,B.e,108,B.R],t.e) +B.E4=new A.a([97,B.te,112,B.c],t.r) +B.vg=new A.a([112,B.z],t.e) +B.jM=new A.a([111,B.vg],t.t) +B.fi=new A.a([108,B.jM],t.V) +B.yx=new A.a([59,B.d,97,B.bx,100,B.c,115,B.fi,118,B.c],t.j) +B.BR=new A.a([97,B.c,98,B.c,99,B.c,100,B.c,101,B.c,102,B.c,103,B.c,104,B.c],t.r) +B.t2=new A.a([59,B.d,97,B.BR],t.j) +B.Ke=new A.a([100,B.t2],t.r) +B.yN=new A.a([115,B.Ke],t.e) +B.GE=new A.a([98,B.br],t.r) +B.C5=new A.a([59,B.d,118,B.GE],t.j) +B.Cu=new A.a([116,B.C5],t.r) +B.pV=new A.a([112,B.ag,116,B.c],t.r) +B.q2=new A.a([59,B.d,101,B.c,108,B.z,109,B.yN,114,B.Cu,115,B.pV,122,B.M],t.j) +B.A6=new A.a([100,B.yx,103,B.q2],t.r) +B.aw=new A.a([59,B.d,101,B.ay],t.j) +B.q_=new A.a([120,B.aw],t.r) +B.k0=new A.a([111,B.q_],t.e) +B.oS=new A.a([114,B.k0],t.t) +B.yj=new A.a([59,B.d,69,B.c,97,B.bj,101,B.c,105,B.a2,111,B.B,112,B.oS],t.j) +B.vx=new A.a([112,B.aw],t.r) +B.JN=new A.a([109,B.vx],t.e) +B.Ib=new A.a([99,B.e,116,B.c,121,B.JN],t.r) +B.kc=new A.a([111,B.cw],t.i) +B.fM=new A.a([99,B.kc,105,B.U],t.t) +B.kD=new A.a([97,B.K,98,B.aH,99,B.qu,101,B.a1,102,B.bq,103,B.a5,108,B.AN,109,B.E4,110,B.A6,111,B.av,112,B.yj,114,B.aL,115,B.Ib,116,B.J,117,B.an,119,B.fM],t.r) +B.ko=new A.a([111,B.bw],t.t) +B.c5=new A.a([112,B.eS],t.J) +B.c0=new A.a([105,B.ho],t.t) +B.b7=new A.a([114,B.c0],t.V) +B.K_=new A.a([109,B.aw],t.r) +B.uc=new A.a([105,B.K_],t.e) +B.Eq=new A.a([99,B.ko,101,B.c5,112,B.b7,115,B.uc],t.t) +B.If=new A.a([107,B.Eq],t.V) +B.mB=new A.a([59,B.d,103,B.z],t.j) +B.Kn=new A.a([100,B.mB],t.r) +B.ls=new A.a([101,B.Kn],t.e) +B.pv=new A.a([118,B.a8,119,B.ls],t.t) +B.Ht=new A.a([99,B.If,114,B.pv],t.V) +B.aa=new A.a([114,B.T],t.e) +B.GM=new A.a([98,B.aa],t.t) +B.pi=new A.a([59,B.d,116,B.GM],t.j) +B.Ig=new A.a([107,B.pi],t.r) +B.nA=new A.a([114,B.Ig],t.e) +B.n2=new A.a([111,B.bw,121,B.c],t.r) +B.cu=new A.a([117,B.a4],t.e) +B.bh=new A.a([113,B.cu],t.t) +B.yQ=new A.a([115,B.al],t.r) +B.HT=new A.a([117,B.yQ],t.e) +B.w7=new A.a([97,B.HT],t.t) +B.zw=new A.a([121,B.aD],t.e) +B.CY=new A.a([116,B.zw],t.t) +B.bc=new A.a([112,B.CY],t.V) +B.yL=new A.a([115,B.ab],t.e) +B.HC=new A.a([117,B.c],t.r) +B.km=new A.a([111,B.HC],t.e) +B.Ja=new A.a([110,B.km],t.t) +B.bV=new A.a([101,B.N],t.e) +B.dr=new A.a([101,B.bV],t.t) +B.yA=new A.a([97,B.c,104,B.c,119,B.dr],t.r) +B.Fa=new A.a([99,B.w7,109,B.bc,112,B.yL,114,B.Ja,116,B.yA],t.e) +B.dl=new A.a([97,B.w,105,B.P,117,B.w],t.e) +B.E0=new A.a([100,B.m,112,B.Q,116,B.aj],t.t) +B.HP=new A.a([117,B.w],t.e) +B.cj=new A.a([99,B.HP],t.t) +B.Fz=new A.a([113,B.cj,116,B.o],t.t) +B.cq=new A.a([119,B.N],t.e) +B.b_=new A.a([111,B.cq],t.t) +B.es=new A.a([100,B.b_,117,B.w],t.e) +B.lM=new A.a([101,B.es],t.t) +B.AZ=new A.a([108,B.lM],t.V) +B.FO=new A.a([103,B.AZ],t.i) +B.JE=new A.a([110,B.FO],t.J) +B.wq=new A.a([97,B.JE],t.O) +B.tE=new A.a([105,B.wq],t.l) +B.o5=new A.a([114,B.tE],t.x) +B.ev=new A.a([112,B.Q],t.V) +B.b4=new A.a([101,B.hs],t.V) +B.kJ=new A.a([99,B.dl,111,B.E0,115,B.Fz,116,B.o5,117,B.ev,118,B.a8,119,B.b4],t.t) +B.G6=new A.a([103,B.kJ],t.V) +B.aM=new A.a([97,B.dS],t.V) +B.hi=new A.a([110,B.fV],t.t) +B.kW=new A.a([101,B.hi],t.V) +B.p3=new A.a([122,B.kW],t.i) +B.k3=new A.a([111,B.p3],t.J) +B.zJ=new A.a([102,B.t],t.e) +B.bT=new A.a([101,B.zJ],t.t) +B.c_=new A.a([104,B.t],t.e) +B.FN=new A.a([103,B.c_],t.t) +B.ej=new A.a([105,B.FN],t.V) +B.A5=new A.a([59,B.d,100,B.b_,108,B.bT,114,B.ej],t.j) +B.l4=new A.a([101,B.A5],t.r) +B.BN=new A.a([108,B.l4],t.e) +B.FR=new A.a([103,B.BN],t.t) +B.Jv=new A.a([110,B.FR],t.V) +B.ws=new A.a([97,B.Jv],t.i) +B.tY=new A.a([105,B.ws],t.J) +B.o9=new A.a([114,B.tY],t.O) +B.KA=new A.a([108,B.k3,115,B.ch,116,B.o9],t.J) +B.Il=new A.a([107,B.KA],t.O) +B.uz=new A.a([99,B.Il,110,B.T],t.e) +B.kR=new A.a([50,B.c,52,B.c],t.r) +B.kN=new A.a([52,B.c],t.r) +B.uC=new A.a([49,B.kR,51,B.kN],t.e) +B.Az=new A.a([99,B.T],t.e) +B.v3=new A.a([97,B.uz,107,B.uC,111,B.Az],t.t) +B.u2=new A.a([105,B.aD],t.e) +B.ha=new A.a([117,B.u2],t.t) +B.vT=new A.a([59,B.d,113,B.ha],t.j) +B.DW=new A.a([101,B.vT,111,B.t],t.r) +B.kf=new A.a([111,B.V],t.e) +B.pk=new A.a([59,B.d,116,B.kf],t.j) +B.bb=new A.a([105,B.z],t.e) +B.Ci=new A.a([116,B.bb],t.t) +B.b9=new A.a([76,B.c,82,B.c,108,B.c,114,B.c],t.r) +B.eR=new A.a([59,B.d,68,B.c,85,B.c,100,B.c,117,B.c],t.j) +B.e9=new A.a([59,B.d,72,B.c,76,B.c,82,B.c,104,B.c,108,B.c,114,B.c],t.j) +B.e3=new A.a([120,B.c],t.r) +B.d4=new A.a([111,B.e3],t.e) +B.qE=new A.a([68,B.b9,72,B.eR,85,B.b9,86,B.e9,98,B.d4,100,B.b9,104,B.eR,109,B.as,112,B.Q,116,B.aj,117,B.b9,118,B.e9],t.r) +B.qQ=new A.a([112,B.y,116,B.pk,119,B.Ci,120,B.qE],t.r) +B.ct=new A.a([98,B.o],t.t) +B.vN=new A.a([101,B.b0,118,B.ct],t.t) +B.JS=new A.a([109,B.ab],t.e) +B.JP=new A.a([109,B.al],t.r) +B.bt=new A.a([98,B.c],t.r) +B.h4=new A.a([117,B.bt],t.e) +B.yZ=new A.a([115,B.h4],t.t) +B.qK=new A.a([59,B.d,98,B.c,104,B.yZ],t.j) +B.B8=new A.a([108,B.qK],t.r) +B.uP=new A.a([99,B.e,101,B.JS,105,B.JP,111,B.B8],t.e) +B.xC=new A.a([59,B.d,101,B.t],t.j) +B.Bq=new A.a([108,B.xC],t.r) +B.at=new A.a([59,B.d,113,B.c],t.j) +B.Go=new A.a([59,B.d,69,B.c,101,B.at],t.j) +B.vj=new A.a([112,B.Go],t.r) +B.xQ=new A.a([108,B.Bq,109,B.vj],t.e) +B.pS=new A.a([78,B.m,97,B.Ht,98,B.nA,99,B.n2,100,B.bh,101,B.Fa,102,B.e,105,B.G6,107,B.aM,108,B.v3,110,B.DW,111,B.qQ,112,B.b7,114,B.vN,115,B.uP,117,B.xQ],t.e) +B.nB=new A.a([114,B.cj],t.V) +B.e2=new A.a([97,B.w,117,B.w],t.e) +B.Kb=new A.a([59,B.d,97,B.bx,98,B.nB,99,B.e2,100,B.m,115,B.c],t.j) +B.DV=new A.a([101,B.t,111,B.N],t.e) +B.uU=new A.a([99,B.S,112,B.Kb,114,B.DV],t.r) +B.Hw=new A.a([112,B.B,114,B.O],t.e) +B.mR=new A.a([59,B.d,115,B.V],t.j) +B.yO=new A.a([115,B.mR],t.r) +B.vm=new A.a([112,B.yO],t.e) +B.KR=new A.a([97,B.Hw,101,B.ao,105,B.P,117,B.vm],t.t) +B.nR=new A.a([114,B.aR],t.V) +B.xA=new A.a([59,B.d,101,B.nR],t.j) +B.CH=new A.a([116,B.xA],t.r) +B.DS=new A.a([100,B.ac,109,B.bc,110,B.CH],t.e) +B.wJ=new A.a([97,B.aa],t.t) +B.Ef=new A.a([59,B.d,109,B.wJ],t.j) +B.Im=new A.a([107,B.Ef],t.r) +B.An=new A.a([99,B.Im],t.e) +B.BP=new A.a([99,B.D,101,B.An,105,B.c],t.r) +B.bM=new A.a([108,B.bT,114,B.ej],t.V) +B.F_=new A.a([119,B.bM],t.i) +B.jU=new A.a([111,B.F_],t.J) +B.ou=new A.a([114,B.jU],t.O) +B.dJ=new A.a([114,B.ou],t.l) +B.ax=new A.a([115,B.t],t.e) +B.vR=new A.a([82,B.c,83,B.c,97,B.ax,99,B.aJ,100,B.I],t.r) +B.mG=new A.a([97,B.dJ,100,B.vR],t.e) +B.mg=new A.a([101,B.mG],t.t) +B.pW=new A.a([59,B.d,101,B.ay,108,B.mg],t.j) +B.aK=new A.a([105,B.a2],t.e) +B.r1=new A.a([59,B.d,69,B.c,99,B.pW,101,B.c,102,B.cw,109,B.aK,115,B.bj],t.j) +B.oo=new A.a([114,B.r1],t.r) +B.eh=new A.a([105,B.t],t.e) +B.r3=new A.a([59,B.d,117,B.eh],t.j) +B.cb=new A.a([115,B.r3],t.r) +B.GH=new A.a([98,B.cb],t.e) +B.HA=new A.a([117,B.GH],t.t) +B.eP=new A.a([59,B.d,101,B.at],t.j) +B.J1=new A.a([110,B.eP],t.r) +B.jI=new A.a([111,B.J1],t.e) +B.pe=new A.a([59,B.d,116,B.c],t.j) +B.wP=new A.a([97,B.pe],t.r) +B.mL=new A.a([109,B.bP,120,B.b2],t.t) +B.mv=new A.a([101,B.mL],t.V) +B.td=new A.a([59,B.d,102,B.N,108,B.mv],t.j) +B.EA=new A.a([109,B.wP,112,B.td],t.r) +B.am=new A.a([59,B.d,100,B.m],t.j) +B.pH=new A.a([103,B.am,105,B.U],t.r) +B.bK=new A.a([111,B.a2],t.e) +B.mV=new A.a([59,B.d,115,B.e],t.j) +B.n5=new A.a([102,B.c,114,B.bK,121,B.mV],t.r) +B.KQ=new A.a([108,B.jI,109,B.EA,110,B.pH,112,B.n5],t.e) +B.pA=new A.a([97,B.q,111,B.cd],t.t) +B.KN=new A.a([98,B.al,112,B.al],t.r) +B.kB=new A.a([99,B.e,117,B.KN],t.e) +B.kE=new A.a([108,B.c,114,B.c],t.r) +B.bZ=new A.a([114,B.kE],t.e) +B.nx=new A.a([114,B.bZ],t.t) +B.wG=new A.a([97,B.nx],t.V) +B.yF=new A.a([112,B.e,115,B.ad],t.e) +B.tg=new A.a([59,B.d,112,B.c],t.j) +B.nJ=new A.a([114,B.tg],t.r) +B.nU=new A.a([114,B.nJ],t.e) +B.xc=new A.a([97,B.nU],t.t) +B.AK=new A.a([99,B.au],t.t) +B.oN=new A.a([114,B.AK],t.V) +B.zF=new A.a([59,B.d,98,B.oN,99,B.e2,100,B.m,111,B.e,115,B.c],t.j) +B.Ee=new A.a([59,B.d,109,B.c],t.j) +B.oD=new A.a([114,B.Ee],t.r) +B.on=new A.a([114,B.oD],t.e) +B.mn=new A.a([101,B.ad],t.e) +B.dN=new A.a([114,B.mn],t.t) +B.As=new A.a([99,B.ad],t.e) +B.I3=new A.a([117,B.As],t.t) +B.yG=new A.a([112,B.dN,115,B.I3],t.V) +B.A2=new A.a([113,B.yG],t.i) +B.ya=new A.a([101,B.A2,118,B.a8,119,B.b4],t.t) +B.zo=new A.a([121,B.ya],t.V) +B.eM=new A.a([97,B.dJ],t.x) +B.lu=new A.a([101,B.eM],t.Y) +B.v4=new A.a([97,B.on,108,B.zo,114,B.bV,118,B.lu],t.t) +B.Ey=new A.a([100,B.wG,101,B.yF,108,B.xc,112,B.zF,114,B.v4,118,B.a8,119,B.b5],t.r) +B.Cx=new A.a([116,B.D],t.e) +B.Au=new A.a([99,B.Cx],t.t) +B.B0=new A.a([108,B.Au],t.V) +B.pL=new A.a([97,B.uU,99,B.KR,100,B.m,101,B.DS,102,B.e,104,B.BP,105,B.oo,108,B.HA,111,B.KQ,114,B.pA,115,B.kB,116,B.aR,117,B.Ey,119,B.fM,121,B.B0],t.e) +B.fz=new A.a([116,B.ag],t.e) +B.mp=new A.a([101,B.fz],t.t) +B.a7=new A.a([59,B.d,118,B.c],t.j) +B.rz=new A.a([104,B.a7],t.r) +B.Dc=new A.a([103,B.cs,108,B.mp,114,B.e,115,B.rz],t.e) +B.pI=new A.a([107,B.aM,108,B.eC],t.t) +B.Ej=new A.a([103,B.cs,114,B.e],t.e) +B.yU=new A.a([115,B.bS],t.t) +B.fv=new A.a([116,B.yU],t.V) +B.pG=new A.a([59,B.d,97,B.Ej,111,B.fv],t.j) +B.co=new A.a([116,B.C],t.e) +B.xl=new A.a([103,B.c,108,B.co,109,B.bc],t.r) +B.eT=new A.a([115,B.c_],t.t) +B.e_=new A.a([105,B.eT,114,B.c],t.r) +B.wB=new A.a([97,B.bZ],t.t) +B.I4=new A.a([117,B.eh],t.t) +B.mW=new A.a([59,B.d,115,B.I4],t.j) +B.Ks=new A.a([100,B.mW],t.r) +B.JB=new A.a([110,B.Ks],t.e) +B.yI=new A.a([59,B.d,111,B.JB,115,B.c],t.j) +B.K5=new A.a([109,B.yI],t.r) +B.wt=new A.a([97,B.cx],t.V) +B.ei=new A.a([105,B.N],t.e) +B.fE=new A.a([116,B.aj],t.i) +B.II=new A.a([110,B.fE],t.J) +B.qY=new A.a([59,B.d,111,B.II],t.j) +B.kX=new A.a([101,B.qY],t.r) +B.Kl=new A.a([100,B.kX],t.e) +B.Jy=new A.a([110,B.e3],t.e) +B.rm=new A.a([59,B.d,105,B.Kl,111,B.Jy],t.j) +B.pC=new A.a([97,B.K5,101,B.c,103,B.wt,115,B.ei,118,B.rm],t.r) +B.dI=new A.a([114,B.N],t.e) +B.bJ=new A.a([111,B.w],t.e) +B.er=new A.a([111,B.dI,114,B.bJ],t.t) +B.AA=new A.a([99,B.er],t.V) +B.fq=new A.a([108,B.o],t.t) +B.A_=new A.a([113,B.am],t.r) +B.qG=new A.a([59,B.d,101,B.A_,109,B.as,112,B.Q,115,B.ch],t.j) +B.EW=new A.a([119,B.b4],t.i) +B.ol=new A.a([114,B.EW],t.J) +B.x6=new A.a([97,B.ol],t.O) +B.GD=new A.a([98,B.x6],t.l) +B.m5=new A.a([101,B.GD],t.x) +B.Be=new A.a([108,B.m5],t.Y) +B.GO=new A.a([98,B.Be],t.k) +B.ES=new A.a([119,B.B],t.e) +B.jV=new A.a([111,B.ES],t.t) +B.nL=new A.a([114,B.jV],t.V) +B.dG=new A.a([114,B.nL],t.i) +B.c8=new A.a([97,B.dG],t.J) +B.Ju=new A.a([110,B.c8],t.O) +B.EZ=new A.a([119,B.Ju],t.l) +B.k8=new A.a([111,B.EZ],t.x) +B.Jt=new A.a([110,B.bM],t.i) +B.jw=new A.a([111,B.Jt],t.J) +B.jB=new A.a([111,B.jw],t.O) +B.vb=new A.a([112,B.jB],t.l) +B.no=new A.a([114,B.vb],t.x) +B.eD=new A.a([97,B.no],t.Y) +B.y9=new A.a([97,B.G,100,B.k8,104,B.eD],t.i) +B.J2=new A.a([110,B.y9],t.J) +B.Gk=new A.a([108,B.fq,112,B.y,116,B.qG,117,B.GO,119,B.J2],t.r) +B.Id=new A.a([107,B.aM],t.i) +B.JI=new A.a([98,B.Id,99,B.er],t.V) +B.fY=new A.a([114,B.c,121,B.c],t.r) +B.vM=new A.a([99,B.fY,111,B.x,116,B.aq],t.e) +B.dj=new A.a([59,B.d,102,B.c],t.j) +B.en=new A.a([105,B.dj],t.r) +B.yr=new A.a([100,B.m,114,B.en],t.e) +B.DJ=new A.a([97,B.q,104,B.o],t.t) +B.FI=new A.a([103,B.bl],t.t) +B.J_=new A.a([110,B.FI],t.V) +B.c6=new A.a([97,B.J_],t.i) +B.nt=new A.a([114,B.M],t.V) +B.fT=new A.a([103,B.nt],t.i) +B.Em=new A.a([99,B.D,105,B.fT],t.e) +B.Gt=new A.a([65,B.q,72,B.o,97,B.Dc,98,B.pI,99,B.bg,100,B.pG,101,B.xl,102,B.e_,104,B.wB,105,B.pC,106,B.p,108,B.AA,111,B.Gk,114,B.JI,115,B.vM,116,B.yr,117,B.DJ,119,B.c6,122,B.Em],t.r) +B.qD=new A.a([68,B.m,111,B.t],t.e) +B.DC=new A.a([99,B.S,115,B.fD],t.V) +B.Ev=new A.a([59,B.d,99,B.c],t.j) +B.dR=new A.a([114,B.Ev],t.r) +B.ye=new A.a([97,B.a6,105,B.dR,111,B.cl,121,B.c],t.r) +B.xq=new A.a([68,B.m,114,B.c],t.r) +B.n1=new A.a([59,B.d,114,B.be,115,B.am],t.j) +B.ot=new A.a([114,B.B],t.e) +B.dp=new A.a([101,B.ot],t.t) +B.Co=new A.a([116,B.dp],t.V) +B.IE=new A.a([110,B.Co],t.i) +B.Fh=new A.a([59,B.d,105,B.IE,108,B.c,115,B.am],t.j) +B.qO=new A.a([59,B.d,115,B.aE,118,B.c],t.j) +B.zq=new A.a([121,B.qO],t.r) +B.CD=new A.a([116,B.zq],t.e) +B.rk=new A.a([51,B.c,52,B.c],t.r) +B.pp=new A.a([49,B.rk,59,B.d],t.j) +B.vc=new A.a([112,B.pp],t.r) +B.vW=new A.a([97,B.r,112,B.CD,115,B.vc],t.e) +B.pQ=new A.a([103,B.c,115,B.w],t.r) +B.mT=new A.a([59,B.d,115,B.x],t.j) +B.nv=new A.a([114,B.mT],t.r) +B.GC=new A.a([59,B.d,108,B.O,118,B.c],t.j) +B.u3=new A.a([105,B.GC],t.r) +B.jr=new A.a([97,B.nv,108,B.ae,115,B.u3],t.e) +B.yi=new A.a([105,B.P,111,B.cl],t.t) +B.bp=new A.a([116,B.e],t.e) +B.pY=new A.a([103,B.bp,108,B.Z],t.t) +B.D7=new A.a([116,B.pY],t.V) +B.IK=new A.a([110,B.D7],t.i) +B.wC=new A.a([97,B.IK],t.J) +B.xY=new A.a([105,B.V,108,B.wC],t.e) +B.cm=new A.a([108,B.B],t.e) +B.Is=new A.a([59,B.d,68,B.eQ],t.j) +B.kI=new A.a([118,B.Is],t.r) +B.ti=new A.a([97,B.cm,101,B.ax,105,B.kI],t.e) +B.yV=new A.a([115,B.x],t.e) +B.p0=new A.a([114,B.yV],t.t) +B.wb=new A.a([97,B.p0],t.V) +B.ez=new A.a([112,B.wb],t.i) +B.n0=new A.a([99,B.yi,115,B.xY,117,B.ti,118,B.ez],t.t) +B.vY=new A.a([68,B.m,97,B.q],t.t) +B.mD=new A.a([99,B.e,100,B.m,105,B.V],t.e) +B.DL=new A.a([97,B.c,104,B.c],t.r) +B.vO=new A.a([109,B.x,114,B.a4],t.e) +B.x3=new A.a([97,B.fy],t.i) +B.CC=new A.a([116,B.x3],t.J) +B.AH=new A.a([99,B.CC],t.O) +B.eF=new A.a([97,B.bl],t.t) +B.tQ=new A.a([105,B.eF],t.V) +B.CU=new A.a([116,B.tQ],t.i) +B.IS=new A.a([110,B.CU],t.J) +B.li=new A.a([101,B.IS],t.O) +B.IY=new A.a([110,B.li],t.l) +B.DX=new A.a([101,B.AH,111,B.IY],t.l) +B.uM=new A.a([99,B.x,105,B.ax,112,B.DX],t.e) +B.uB=new A.a([68,B.qD,97,B.DC,99,B.ye,100,B.m,101,B.c,102,B.xq,103,B.n1,108,B.Fh,109,B.vW,110,B.pQ,111,B.av,112,B.jr,113,B.n0,114,B.vY,115,B.mD,116,B.DL,117,B.vO,120,B.uM],t.r) +B.jx=new A.a([111,B.fv],t.i) +B.Ku=new A.a([100,B.jx],t.J) +B.G1=new A.a([103,B.Ku],t.O) +B.Jx=new A.a([110,B.G1],t.l) +B.em=new A.a([105,B.Jx],t.x) +B.Br=new A.a([108,B.em],t.Y) +B.AU=new A.a([108,B.Br],t.k) +B.JX=new A.a([109,B.eF],t.V) +B.xX=new A.a([105,B.R,108,B.c3],t.e) +B.jt=new A.a([105,B.a1,108,B.xX,114,B.c],t.r) +B.hj=new A.a([110,B.B],t.e) +B.DN=new A.a([97,B.t,108,B.c3,116,B.hj],t.e) +B.dd=new A.a([111,B.y],t.e) +B.DY=new A.a([97,B.cn,107,B.a7],t.r) +B.Hv=new A.a([112,B.y,114,B.DY],t.e) +B.fu=new A.a([116,B.c2],t.V) +B.oa=new A.a([114,B.fu],t.i) +B.wr=new A.a([97,B.oa],t.J) +B.qT=new A.a([50,B.c,51,B.c,52,B.c,53,B.c,54,B.c,56,B.c],t.r) +B.Er=new A.a([51,B.c,53,B.c],t.r) +B.xv=new A.a([52,B.c,53,B.c,56,B.c],t.r) +B.Ec=new A.a([53,B.c],t.r) +B.pF=new A.a([54,B.c,56,B.c],t.r) +B.pR=new A.a([56,B.c],t.r) +B.KP=new A.a([49,B.qT,50,B.Er,51,B.xv,52,B.Ec,53,B.pF,55,B.pR],t.e) +B.Dz=new A.a([99,B.KP,115,B.x],t.e) +B.py=new A.a([97,B.Dz,111,B.cq],t.t) +B.yk=new A.a([97,B.AU,99,B.D,101,B.JX,102,B.jt,105,B.a1,106,B.a1,108,B.DN,110,B.dd,111,B.Hv,112,B.wr,114,B.py,115,B.r],t.e) +B.uE=new A.a([99,B.S,109,B.hl,112,B.c],t.r) +B.wf=new A.a([97,B.U],t.t) +B.AT=new A.a([108,B.wf],t.V) +B.bs=new A.a([59,B.d,113,B.c,115,B.AT],t.j) +B.qX=new A.a([59,B.d,111,B.b6],t.j) +B.CE=new A.a([116,B.qX],t.r) +B.jO=new A.a([111,B.CE],t.e) +B.eO=new A.a([59,B.d,101,B.B],t.j) +B.xu=new A.a([59,B.d,99,B.ad,100,B.jO,108,B.eO],t.j) +B.kK=new A.a([59,B.d,108,B.c,113,B.bs,115,B.xu],t.j) +B.dD=new A.a([59,B.d,103,B.c],t.j) +B.bU=new A.a([101,B.x],t.e) +B.K2=new A.a([109,B.bU],t.t) +B.F5=new A.a([59,B.d,69,B.c,97,B.c,106,B.c],t.j) +B.bX=new A.a([114,B.d4],t.t) +B.tf=new A.a([59,B.d,112,B.bX],t.j) +B.vi=new A.a([112,B.tf],t.r) +B.vU=new A.a([59,B.d,113,B.at],t.j) +B.H=new A.a([105,B.V],t.e) +B.eN=new A.a([69,B.c,97,B.vi,101,B.vU,115,B.H],t.r) +B.pX=new A.a([59,B.d,101,B.c,108,B.c],t.j) +B.JL=new A.a([109,B.pX],t.r) +B.Eo=new A.a([99,B.e,105,B.JL],t.e) +B.fK=new A.a([99,B.c,105,B.e],t.r) +B.v7=new A.a([80,B.o],t.t) +B.mk=new A.a([101,B.ax],t.t) +B.cv=new A.a([117,B.mk],t.V) +B.eA=new A.a([112,B.bX],t.V) +B.Hy=new A.a([112,B.eA,114,B.e],t.e) +B.BA=new A.a([108,B.Z],t.V) +B.xw=new A.a([108,B.Z,113,B.BA],t.V) +B.A4=new A.a([113,B.xw],t.i) +B.K8=new A.a([97,B.Hy,100,B.m,101,B.A4,108,B.Z,115,B.H],t.t) +B.tt=new A.a([59,B.d,99,B.fK,100,B.m,108,B.v7,113,B.cv,114,B.K8],t.j) +B.f8=new A.a([113,B.ay],t.e) +B.la=new A.a([101,B.f8],t.t) +B.J9=new A.a([110,B.la],t.V) +B.Cy=new A.a([116,B.J9],t.i) +B.oF=new A.a([114,B.Cy],t.J) +B.e6=new A.a([101,B.oF,110,B.cf],t.e) +B.K7=new A.a([69,B.b6,97,B.uE,98,B.aH,99,B.a_,100,B.m,101,B.kK,102,B.e,103,B.dD,105,B.K2,106,B.p,108,B.F5,110,B.eN,111,B.A,114,B.be,115,B.Eo,116,B.tt,118,B.e6],t.r) +B.cc=new A.a([115,B.w],t.e) +B.nq=new A.a([114,B.cc],t.t) +B.fh=new A.a([108,B.t],t.e) +B.u_=new A.a([105,B.fh],t.t) +B.KG=new A.a([59,B.d,99,B.ar,119,B.c],t.j) +B.yt=new A.a([100,B.p,114,B.KG],t.r) +B.pn=new A.a([105,B.nq,108,B.y,109,B.u_,114,B.yt],t.e) +B.CB=new A.a([116,B.cb],t.e) +B.ob=new A.a([114,B.CB],t.t) +B.uj=new A.a([105,B.w],t.e) +B.fo=new A.a([108,B.uj],t.t) +B.Ag=new A.a([99,B.O],t.t) +B.zI=new A.a([97,B.ob,108,B.fo,114,B.Ag],t.V) +B.yd=new A.a([101,B.aM,119,B.aM],t.i) +B.z8=new A.a([115,B.yd],t.J) +B.Cz=new A.a([116,B.c_],t.t) +B.mc=new A.a([101,B.f4],t.l) +B.dm=new A.a([108,B.mc,114,B.ah],t.x) +B.Ih=new A.a([107,B.dm],t.Y) +B.A7=new A.a([97,B.q,109,B.Cz,111,B.Ih,112,B.y,114,B.ct],t.e) +B.E9=new A.a([99,B.e,108,B.I,116,B.aq],t.e) +B.HM=new A.a([117,B.cn],t.t) +B.rI=new A.a([104,B.bV],t.t) +B.KL=new A.a([98,B.HM,112,B.rI],t.V) +B.Fj=new A.a([65,B.q,97,B.pn,98,B.o,99,B.aJ,101,B.zI,102,B.e,107,B.z8,111,B.A7,115,B.E9,121,B.KL],t.e) +B.v5=new A.a([59,B.d,105,B.P,121,B.c],t.j) +B.Ap=new A.a([99,B.x],t.e) +B.mQ=new A.a([99,B.D,120,B.Ap],t.e) +B.Aa=new A.a([102,B.c,114,B.c],t.r) +B.zW=new A.a([105,B.U,110,B.t],t.e) +B.f6=new A.a([102,B.ei],t.t) +B.qx=new A.a([59,B.d,105,B.zW,110,B.f6,111,B.co],t.j) +B.dT=new A.a([114,B.t],t.e) +B.eK=new A.a([97,B.dT],t.t) +B.mY=new A.a([101,B.c,108,B.ba,112,B.eK],t.r) +B.Iw=new A.a([99,B.e,103,B.mY,116,B.ag],t.e) +B.mO=new A.a([97,B.Iw,111,B.y,112,B.b5],t.e) +B.pg=new A.a([59,B.d,116,B.bb],t.j) +B.J3=new A.a([110,B.pg],t.r) +B.tN=new A.a([105,B.J3],t.e) +B.Ao=new A.a([99,B.bf],t.t) +B.Eh=new A.a([103,B.dp,114,B.Ao],t.V) +B.rU=new A.a([104,B.T],t.e) +B.nP=new A.a([114,B.rU],t.t) +B.we=new A.a([97,B.nP],t.V) +B.dV=new A.a([114,B.bK],t.t) +B.Iy=new A.a([59,B.d,99,B.bf,101,B.Eh,108,B.we,112,B.dV],t.j) +B.Ds=new A.a([59,B.d,99,B.eH,102,B.tN,111,B.aR,116,B.Iy],t.j) +B.F8=new A.a([99,B.D,103,B.O,112,B.y,116,B.C],t.e) +B.rd=new A.a([59,B.d,69,B.c,100,B.m,115,B.a7,118,B.c],t.j) +B.Jw=new A.a([110,B.rd],t.r) +B.En=new A.a([99,B.e,105,B.Jw],t.e) +B.yp=new A.a([59,B.d,105,B.bk],t.j) +B.yv=new A.a([97,B.K,99,B.v5,101,B.mQ,102,B.Aa,103,B.a5,105,B.qx,106,B.a1,109,B.mO,110,B.Ds,111,B.F8,112,B.dV,113,B.cv,115,B.En,116,B.yp,117,B.e1],t.r) +B.eB=new A.a([97,B.fz],t.t) +B.BQ=new A.a([99,B.a_,102,B.e,109,B.eB,111,B.A,115,B.fI,117,B.hd],t.e) +B.wl=new A.a([97,B.a7],t.r) +B.vu=new A.a([112,B.wl],t.e) +B.vo=new A.a([112,B.vu],t.t) +B.nz=new A.a([114,B.dr],t.V) +B.JH=new A.a([97,B.vo,99,B.di,102,B.e,103,B.nz,104,B.p,106,B.p,111,B.A,115,B.r],t.e) +B.eI=new A.a([97,B.ac],t.t) +B.dY=new A.a([97,B.q,114,B.e,116,B.eI],t.e) +B.hm=new A.a([109,B.bc],t.i) +B.wN=new A.a([97,B.N],t.e) +B.nj=new A.a([114,B.wN],t.t) +B.n_=new A.a([59,B.d,100,B.c,108,B.z],t.j) +B.FS=new A.a([103,B.n_],t.r) +B.dk=new A.a([59,B.d,102,B.B],t.j) +B.vH=new A.a([59,B.d,98,B.dk,102,B.B,104,B.T,108,B.w,112,B.x,115,B.H,116,B.x],t.j) +B.nM=new A.a([114,B.vH],t.r) +B.a9=new A.a([59,B.d,115,B.c],t.j) +B.po=new A.a([59,B.d,97,B.ac,101,B.a9],t.j) +B.kP=new A.a([99,B.S,101,B.hm,103,B.nj,109,B.h1,110,B.FS,112,B.c,113,B.cu,114,B.nM,116,B.po],t.r) +B.rb=new A.a([101,B.c,107,B.c],t.r) +B.Aw=new A.a([99,B.rb],t.e) +B.uY=new A.a([100,B.c,117,B.c],t.r) +B.BD=new A.a([108,B.uY],t.e) +B.Dg=new A.a([101,B.c,115,B.BD],t.r) +B.DZ=new A.a([97,B.Aw,107,B.Dg],t.e) +B.fc=new A.a([97,B.q,98,B.aa,114,B.DZ],t.t) +B.EJ=new A.a([100,B.ac,105,B.x],t.e) +B.dF=new A.a([97,B.a6,101,B.EJ,117,B.bt,121,B.c],t.r) +B.dg=new A.a([111,B.bq],t.r) +B.hc=new A.a([117,B.dg],t.e) +B.aI=new A.a([104,B.o],t.t) +B.eU=new A.a([115,B.aI],t.V) +B.uX=new A.a([100,B.aI,117,B.eU],t.V) +B.ts=new A.a([99,B.C,113,B.hc,114,B.uX,115,B.ag],t.e) +B.pf=new A.a([59,B.d,116,B.eI],t.j) +B.ER=new A.a([119,B.pf],t.r) +B.jE=new A.a([111,B.ER],t.e) +B.p_=new A.a([114,B.jE],t.t) +B.dK=new A.a([114,B.p_],t.V) +B.Ji=new A.a([110,B.es],t.t) +B.jS=new A.a([111,B.Ji],t.V) +B.jL=new A.a([111,B.jS],t.i) +B.vv=new A.a([112,B.jL],t.J) +B.og=new A.a([114,B.vv],t.O) +B.eE=new A.a([97,B.og],t.l) +B.fG=new A.a([116,B.c8],t.O) +B.zK=new A.a([102,B.fG],t.l) +B.m6=new A.a([101,B.zK],t.x) +B.F1=new A.a([119,B.a9],t.r) +B.kb=new A.a([111,B.F1],t.e) +B.nm=new A.a([114,B.kb],t.t) +B.nK=new A.a([114,B.nm],t.V) +B.d5=new A.a([111,B.hj],t.t) +B.jW=new A.a([111,B.d5],t.V) +B.vl=new A.a([112,B.jW],t.i) +B.nO=new A.a([114,B.vl],t.J) +B.eJ=new A.a([97,B.nO],t.O) +B.Ge=new A.a([103,B.c7],t.J) +B.tZ=new A.a([105,B.Ge],t.O) +B.I1=new A.a([117,B.tZ],t.l) +B.f7=new A.a([113,B.I1],t.x) +B.ju=new A.a([97,B.nK,104,B.eJ,115,B.f7],t.i) +B.CA=new A.a([116,B.ju],t.J) +B.rA=new A.a([104,B.CA],t.O) +B.FJ=new A.a([103,B.rA],t.l) +B.tX=new A.a([105,B.FJ],t.x) +B.m3=new A.a([101,B.fE],t.J) +B.kV=new A.a([101,B.m3],t.O) +B.nE=new A.a([114,B.kV],t.l) +B.eb=new A.a([104,B.nE],t.x) +B.DO=new A.a([97,B.dK,104,B.eE,108,B.m6,114,B.tX,116,B.eb],t.i) +B.Cv=new A.a([116,B.DO],t.J) +B.qZ=new A.a([59,B.d,111,B.bq],t.j) +B.C7=new A.a([116,B.qZ],t.r) +B.jv=new A.a([111,B.C7],t.e) +B.bd=new A.a([112,B.eA],t.i) +B.FW=new A.a([103,B.bp],t.t) +B.nf=new A.a([103,B.bp,113,B.FW],t.t) +B.A0=new A.a([113,B.nf],t.V) +B.tb=new A.a([97,B.bd,100,B.m,101,B.A0,103,B.bp,115,B.H],t.t) +B.Fs=new A.a([59,B.d,99,B.ad,100,B.jv,103,B.eO,115,B.tb],t.j) +B.xk=new A.a([59,B.d,102,B.Cv,103,B.c,113,B.bs,115,B.Fs],t.j) +B.d3=new A.a([105,B.eT,108,B.db,114,B.c],t.r) +B.c4=new A.a([59,B.d,69,B.c],t.j) +B.uV=new A.a([100,B.c,117,B.b6],t.r) +B.dX=new A.a([114,B.uV],t.e) +B.fj=new A.a([108,B.T],t.e) +B.kt=new A.a([97,B.dX,98,B.fj],t.t) +B.IF=new A.a([110,B.b1],t.t) +B.nI=new A.a([114,B.IF],t.V) +B.d6=new A.a([111,B.nI],t.i) +B.oU=new A.a([114,B.a2],t.e) +B.wi=new A.a([97,B.oU],t.t) +B.ap=new A.a([114,B.ab],t.e) +B.Gs=new A.a([59,B.d,97,B.q,99,B.d6,104,B.wi,116,B.ap],t.j) +B.rG=new A.a([104,B.z],t.e) +B.At=new A.a([99,B.rG],t.t) +B.t6=new A.a([59,B.d,97,B.At],t.j) +B.CN=new A.a([116,B.t6],t.r) +B.z0=new A.a([115,B.CN],t.e) +B.h5=new A.a([117,B.z0],t.t) +B.yg=new A.a([105,B.aR,111,B.h5],t.V) +B.f1=new A.a([110,B.R,114,B.e],t.e) +B.fw=new A.a([116,B.a4],t.e) +B.yY=new A.a([115,B.fw],t.t) +B.vh=new A.a([112,B.yY],t.V) +B.wk=new A.a([97,B.vh],t.i) +B.El=new A.a([108,B.dy,109,B.wk,114,B.ah],t.J) +B.FH=new A.a([103,B.El],t.O) +B.vs=new A.a([112,B.eM],t.Y) +B.e4=new A.a([97,B.e,102,B.c,108,B.ae],t.r) +B.ku=new A.a([97,B.ax,98,B.o],t.t) +B.tp=new A.a([59,B.d,101,B.hi,102,B.c],t.j) +B.Gw=new A.a([97,B.f1,98,B.aa,110,B.FH,111,B.vs,112,B.e4,116,B.aj,119,B.ku,122,B.tp],t.r) +B.n9=new A.a([59,B.d,108,B.t],t.j) +B.nn=new A.a([114,B.n9],t.r) +B.wS=new A.a([97,B.nn],t.e) +B.oV=new A.a([114,B.br],t.r) +B.wY=new A.a([97,B.oV],t.e) +B.EN=new A.a([97,B.q,99,B.d6,104,B.wY,109,B.c,116,B.ap],t.r) +B.rg=new A.a([59,B.d,101,B.c,103,B.c],t.j) +B.JW=new A.a([109,B.rg],t.r) +B.fP=new A.a([98,B.c,117,B.dg],t.r) +B.GB=new A.a([97,B.bh,99,B.e,104,B.c,105,B.JW,113,B.fP,116,B.aq],t.r) +B.dL=new A.a([114,B.a8],t.t) +B.to=new A.a([59,B.d,101,B.c,102,B.c],t.j) +B.C_=new A.a([80,B.o,105,B.to],t.r) +B.ng=new A.a([59,B.d,99,B.fK,100,B.m,104,B.dL,105,B.cy,108,B.M,113,B.cv,114,B.C_],t.j) +B.uW=new A.a([100,B.eU,117,B.aI],t.V) +B.oW=new A.a([114,B.uW],t.i) +B.rh=new A.a([65,B.dY,66,B.M,69,B.dD,72,B.o,97,B.kP,98,B.fc,99,B.dF,100,B.ts,101,B.xk,102,B.d3,103,B.c4,104,B.kt,106,B.p,108,B.Gs,109,B.yg,110,B.eN,111,B.Gw,112,B.wS,114,B.EN,115,B.GB,116,B.ng,117,B.oW,118,B.e6],t.r) +B.xE=new A.a([59,B.d,101,B.eV],t.j) +B.w4=new A.a([101,B.c,116,B.xE],t.r) +B.n4=new A.a([59,B.d,100,B.b_,108,B.bT,117,B.w],t.j) +B.kn=new A.a([111,B.n4],t.r) +B.Cm=new A.a([116,B.kn],t.e) +B.mS=new A.a([59,B.d,115,B.Cm],t.j) +B.Ii=new A.a([107,B.b1],t.t) +B.uI=new A.a([99,B.e,108,B.w4,112,B.mS,114,B.Ii],t.r) +B.n3=new A.a([111,B.cx,121,B.c],t.r) +B.Kj=new A.a([100,B.c6],t.J) +B.l7=new A.a([101,B.Kj],t.O) +B.oe=new A.a([114,B.l7],t.l) +B.HW=new A.a([117,B.oe],t.x) +B.zb=new A.a([115,B.HW],t.Y) +B.wL=new A.a([97,B.zb],t.k) +B.dH=new A.a([114,B.a4],t.e) +B.pb=new A.a([59,B.d,97,B.ax,99,B.ar,100,B.m],t.j) +B.r4=new A.a([59,B.d,117,B.c],t.j) +B.nd=new A.a([59,B.d,98,B.c,100,B.r4],t.j) +B.zg=new A.a([115,B.nd],t.r) +B.I0=new A.a([117,B.zg],t.e) +B.Du=new A.a([99,B.dH,100,B.pb,110,B.I0],t.r) +B.w1=new A.a([99,B.w,100,B.e],t.e) +B.lO=new A.a([101,B.cm],t.t) +B.vQ=new A.a([100,B.lO,112,B.y],t.e) +B.k_=new A.a([111,B.B],t.e) +B.vz=new A.a([112,B.k_],t.t) +B.xt=new A.a([99,B.e,116,B.vz],t.e) +B.K0=new A.a([109,B.au],t.t) +B.tJ=new A.a([105,B.K0],t.V) +B.D_=new A.a([116,B.tJ],t.i) +B.n6=new A.a([59,B.d,108,B.D_,109,B.au],t.j) +B.pq=new A.a([68,B.ca,97,B.uI,99,B.n3,100,B.I,101,B.wL,102,B.e,104,B.a4,105,B.Du,108,B.w1,110,B.ev,111,B.vQ,112,B.c,115,B.xt,117,B.n6],t.r) +B.Gr=new A.a([103,B.c,116,B.a7],t.r) +B.KC=new A.a([101,B.f3,108,B.c,116,B.a7],t.r) +B.uN=new A.a([68,B.I,100,B.I],t.V) +B.uJ=new A.a([59,B.d,69,B.c,105,B.a2,111,B.B,112,B.bX],t.j) +B.AR=new A.a([108,B.a9],t.r) +B.t5=new A.a([59,B.d,97,B.AR],t.j) +B.nX=new A.a([114,B.t5],t.r) +B.HQ=new A.a([117,B.nX],t.e) +B.ID=new A.a([98,B.ff,99,B.S,110,B.R,112,B.uJ,116,B.HQ],t.r) +B.vA=new A.a([112,B.al],t.r) +B.JR=new A.a([109,B.vA],t.e) +B.IB=new A.a([115,B.w,117,B.JR],t.e) +B.h3=new A.a([112,B.c,114,B.O],t.r) +B.FX=new A.a([103,B.am],t.r) +B.Jh=new A.a([110,B.FX],t.e) +B.jp=new A.a([97,B.h3,101,B.ao,111,B.Jh,117,B.w,121,B.c],t.r) +B.qV=new A.a([59,B.d,111,B.fN],t.j) +B.FD=new A.a([104,B.T,114,B.qV],t.r) +B.b8=new A.a([114,B.FD],t.e) +B.Fd=new A.a([101,B.o,105,B.V],t.e) +B.CK=new A.a([116,B.a9],t.r) +B.z9=new A.a([115,B.CK],t.e) +B.tU=new A.a([105,B.z9],t.t) +B.C3=new A.a([59,B.d,65,B.q,97,B.b8,100,B.m,113,B.ha,115,B.Fd,120,B.tU],t.j) +B.Gu=new A.a([59,B.d,113,B.bs,115,B.c],t.j) +B.Gp=new A.a([69,B.c,101,B.Gu,115,B.H,116,B.bq],t.r) +B.Dd=new A.a([65,B.q,97,B.q,112,B.o],t.t) +B.qP=new A.a([59,B.d,115,B.br,118,B.c],t.j) +B.KS=new A.a([59,B.d,102,B.fF,113,B.bs,115,B.a9],t.j) +B.ef=new A.a([105,B.al],t.r) +B.EL=new A.a([59,B.d,114,B.ef],t.j) +B.zE=new A.a([65,B.q,69,B.c,97,B.q,100,B.e,101,B.KS,115,B.H,116,B.EL],t.r) +B.e5=new A.a([97,B.c,98,B.c,99,B.c],t.r) +B.kA=new A.a([59,B.d,69,B.c,100,B.m,118,B.e5],t.j) +B.Jf=new A.a([110,B.kA],t.r) +B.C6=new A.a([59,B.d,118,B.e5],t.j) +B.ub=new A.a([105,B.C6],t.r) +B.EG=new A.a([59,B.d,105,B.Jf,110,B.ub],t.j) +B.pU=new A.a([112,B.y,116,B.EG],t.r) +B.fr=new A.a([108,B.bU],t.t) +B.fn=new A.a([108,B.fr],t.V) +B.pN=new A.a([59,B.d,97,B.fn,115,B.x,116,B.c],t.j) +B.oY=new A.a([114,B.pN],t.r) +B.fe=new A.a([108,B.c2],t.V) +B.bv=new A.a([117,B.z],t.e) +B.Ex=new A.a([59,B.d,99,B.aw],t.j) +B.E5=new A.a([59,B.d,99,B.bv,101,B.Ex],t.j) +B.Fb=new A.a([97,B.oY,111,B.fe,114,B.E5],t.r) +B.KH=new A.a([59,B.d,99,B.c,119,B.c],t.j) +B.p2=new A.a([114,B.KH],t.r) +B.oR=new A.a([114,B.p2],t.e) +B.of=new A.a([114,B.ef],t.e) +B.n7=new A.a([65,B.q,97,B.oR,105,B.fR,116,B.of],t.t) +B.Gx=new A.a([59,B.d,99,B.bv,101,B.c,114,B.c],t.j) +B.xh=new A.a([97,B.fn],t.i) +B.nr=new A.a([114,B.xh],t.J) +B.x0=new A.a([97,B.nr],t.O) +B.Ez=new A.a([109,B.aK,112,B.x0],t.t) +B.Ce=new A.a([116,B.Ez],t.V) +B.dU=new A.a([114,B.Ce],t.i) +B.kq=new A.a([111,B.dU],t.J) +B.JM=new A.a([109,B.eP],t.r) +B.KM=new A.a([98,B.z,112,B.z],t.e) +B.HJ=new A.a([117,B.KM],t.t) +B.z2=new A.a([115,B.HJ],t.V) +B.ci=new A.a([113,B.at],t.r) +B.xF=new A.a([59,B.d,101,B.ci],t.j) +B.D6=new A.a([116,B.xF],t.r) +B.kU=new A.a([101,B.D6],t.e) +B.h0=new A.a([59,B.d,69,B.c,101,B.c,115,B.kU],t.j) +B.AB=new A.a([99,B.aw],t.r) +B.uZ=new A.a([98,B.h0,99,B.AB,112,B.h0],t.r) +B.q3=new A.a([99,B.Gx,104,B.kq,105,B.JM,109,B.aK,112,B.o,113,B.z2,117,B.uZ],t.r) +B.bm=new A.a([116,B.aw],t.r) +B.zR=new A.a([102,B.bm],t.e) +B.dq=new A.a([101,B.zR],t.t) +B.rD=new A.a([104,B.bm],t.e) +B.FG=new A.a([103,B.rD],t.t) +B.el=new A.a([105,B.FG],t.V) +B.kH=new A.a([108,B.dq,114,B.el],t.V) +B.mb=new A.a([101,B.kH],t.i) +B.BB=new A.a([108,B.mb],t.J) +B.FU=new A.a([103,B.BB],t.O) +B.Jn=new A.a([110,B.FU],t.l) +B.x_=new A.a([97,B.Jn],t.x) +B.tB=new A.a([105,B.x_],t.Y) +B.Dy=new A.a([103,B.x,105,B.bk,108,B.R,114,B.tB],t.e) +B.Ka=new A.a([59,B.d,101,B.dH,115,B.w],t.j) +B.Ed=new A.a([59,B.d,109,B.Ka],t.j) +B.w6=new A.a([101,B.c,116,B.c],t.r) +B.JA=new A.a([110,B.f6],t.V) +B.EM=new A.a([59,B.d,114,B.bb],t.j) +B.Dr=new A.a([65,B.q,101,B.c,116,B.EM],t.r) +B.nW=new A.a([114,B.bb],t.t) +B.kv=new A.a([65,B.q,116,B.nW],t.t) +B.qM=new A.a([68,B.I,72,B.M,97,B.w,100,B.I,103,B.w6,105,B.JA,108,B.Dr,114,B.kv,115,B.H],t.e) +B.lF=new A.a([101,B.o],t.t) +B.rr=new A.a([65,B.q,97,B.b8,110,B.lF],t.t) +B.re=new A.a([71,B.Gr,76,B.KC,82,B.ah,86,B.uN,97,B.ID,98,B.IB,99,B.jp,100,B.I,101,B.C3,102,B.e,103,B.Gp,104,B.Dd,105,B.qP,106,B.p,108,B.zE,109,B.aK,111,B.pU,112,B.Fb,114,B.n7,115,B.q3,116,B.Dy,117,B.Ed,118,B.qM,119,B.rr],t.r) +B.DA=new A.a([99,B.S,115,B.t],t.e) +B.yD=new A.a([105,B.dR,121,B.c],t.r) +B.B3=new A.a([108,B.a2],t.e) +B.kg=new A.a([111,B.B3],t.t) +B.Fl=new A.a([97,B.eZ,98,B.ck,105,B.aD,111,B.t,115,B.kg],t.e) +B.Hu=new A.a([99,B.ar,114,B.c],t.r) +B.uv=new A.a([111,B.N,114,B.be,116,B.c],t.r) +B.Fr=new A.a([98,B.o,109,B.c],t.r) +B.pr=new A.a([105,B.e,114,B.dh],t.e) +B.Fy=new A.a([97,B.q,99,B.pr,105,B.aP,116,B.c],t.r) +B.Dv=new A.a([99,B.a6,100,B.c,110,B.ae],t.r) +B.tk=new A.a([97,B.r,101,B.fS,105,B.Dv],t.e) +B.bY=new A.a([114,B.w],t.e) +B.qH=new A.a([97,B.e,101,B.bY,108,B.ae],t.e) +B.qW=new A.a([59,B.d,111,B.y],t.j) +B.os=new A.a([114,B.qW],t.r) +B.xj=new A.a([59,B.d,101,B.os,102,B.c,109,B.c],t.j) +B.G0=new A.a([103,B.dd],t.t) +B.DM=new A.a([59,B.d,97,B.q,100,B.xj,105,B.G0,111,B.e,115,B.fi,118,B.c],t.j) +B.q0=new A.a([99,B.e,108,B.I,111,B.x],t.e) +B.t3=new A.a([59,B.d,97,B.B],t.j) +B.z3=new A.a([115,B.t3],t.r) +B.ln=new A.a([101,B.z3],t.e) +B.xO=new A.a([108,B.aQ,109,B.ln],t.t) +B.tA=new A.a([105,B.xO],t.V) +B.Ky=new A.a([83,B.c,97,B.DA,99,B.yD,100,B.Fl,101,B.a1,102,B.Hu,103,B.uv,104,B.Fr,105,B.U,108,B.Fy,109,B.tk,111,B.A,112,B.qH,114,B.DM,115,B.q0,116,B.tA,117,B.an,118,B.ct],t.r) +B.na=new A.a([59,B.d,108,B.fr],t.j) +B.xW=new A.a([105,B.V,108,B.c],t.r) +B.pM=new A.a([59,B.d,97,B.na,115,B.xW,116,B.c],t.j) +B.ni=new A.a([114,B.pM],t.r) +B.IP=new A.a([110,B.T],t.e) +B.lV=new A.a([101,B.IP],t.t) +B.t9=new A.a([99,B.U,105,B.bK,109,B.ac,112,B.c,116,B.lV],t.r) +B.oE=new A.a([114,B.t9],t.e) +B.JU=new A.a([109,B.eG],t.t) +B.Iz=new A.a([105,B.a7,109,B.JU,111,B.aP],t.r) +B.kh=new A.a([111,B.aa],t.t) +B.zT=new A.a([102,B.kh],t.V) +B.rV=new A.a([104,B.zT],t.i) +B.Ar=new A.a([99,B.rV],t.J) +B.F9=new A.a([59,B.d,116,B.Ar,118,B.c],t.j) +B.Kz=new A.a([59,B.d,104,B.c],t.j) +B.Io=new A.a([107,B.Kz],t.r) +B.tq=new A.a([99,B.Io,107,B.aD],t.e) +B.Jd=new A.a([110,B.tq],t.t) +B.Dj=new A.a([111,B.c,117,B.c],t.r) +B.F0=new A.a([119,B.a4],t.e) +B.Eu=new A.a([59,B.d,97,B.bj,98,B.c,99,B.ar,100,B.Dj,101,B.c,109,B.N,115,B.H,116,B.F0],t.j) +B.z4=new A.a([115,B.Eu],t.r) +B.pJ=new A.a([97,B.Jd,117,B.z4],t.e) +B.IT=new A.a([110,B.fu],t.i) +B.yu=new A.a([105,B.IT,112,B.y,117,B.bx],t.e) +B.zr=new A.a([121,B.bS],t.t) +B.Bp=new A.a([108,B.zr],t.V) +B.oX=new A.a([114,B.Bp],t.i) +B.HF=new A.a([117,B.oX],t.J) +B.Fu=new A.a([97,B.bd,101,B.f8,115,B.H],t.t) +B.et=new A.a([59,B.d,97,B.bd,99,B.HF,101,B.ay,110,B.Fu,115,B.H],t.j) +B.Ew=new A.a([59,B.d,99,B.et],t.j) +B.l2=new A.a([101,B.a9],t.r) +B.K1=new A.a([109,B.l2],t.e) +B.e8=new A.a([69,B.c,97,B.w,115,B.H],t.r) +B.Ia=new A.a([117,B.bW],t.t) +B.js=new A.a([97,B.fq,108,B.ba,115,B.Ia],t.V) +B.pl=new A.a([59,B.d,116,B.a4],t.j) +B.Dx=new A.a([100,B.c,102,B.js,112,B.pl],t.r) +B.o3=new A.a([114,B.bU],t.t) +B.kO=new A.a([59,B.d,69,B.c,97,B.w,99,B.bv,101,B.Ew,105,B.K1,110,B.e8,111,B.Dx,115,B.H,117,B.o3],t.j) +B.AD=new A.a([99,B.cc],t.t) +B.Jg=new A.a([110,B.AD],t.V) +B.DT=new A.a([97,B.ni,99,B.D,101,B.oE,102,B.e,104,B.Iz,105,B.F9,108,B.pJ,109,B.c,111,B.yu,114,B.kO,115,B.fL,117,B.Jg],t.r) +B.ut=new A.a([105,B.d5],t.V) +B.J8=new A.a([110,B.ut],t.i) +B.oB=new A.a([114,B.J8],t.J) +B.Fe=new A.a([101,B.oB,105,B.U],t.t) +B.C9=new A.a([116,B.Fe],t.V) +B.yK=new A.a([115,B.bm],t.e) +B.r8=new A.a([97,B.C9,101,B.yK,111,B.t],t.e) +B.vS=new A.a([102,B.e,105,B.U,111,B.A,112,B.b7,115,B.r,117,B.r8],t.e) +B.zj=new A.a([101,B.c,117,B.aO],t.r) +B.u6=new A.a([105,B.ad],t.e) +B.ro=new A.a([59,B.d,100,B.c,101,B.c,108,B.z],t.j) +B.Gb=new A.a([103,B.ro],t.r) +B.yB=new A.a([59,B.d,97,B.w,98,B.dk,99,B.c,102,B.B,104,B.T,108,B.w,112,B.x,115,B.H,116,B.x,119,B.c],t.j) +B.nV=new A.a([114,B.yB],t.r) +B.xf=new A.a([97,B.cm],t.t) +B.Gq=new A.a([59,B.d,110,B.xf],t.j) +B.k4=new A.a([111,B.Gq],t.r) +B.ps=new A.a([97,B.ac,105,B.k4],t.e) +B.t8=new A.a([99,B.zj,100,B.u6,101,B.hm,110,B.Gb,113,B.cu,114,B.nV,116,B.ps],t.e) +B.Kw=new A.a([100,B.aI],t.V) +B.qA=new A.a([99,B.C,108,B.Kw,113,B.hc,115,B.ag],t.e) +B.vL=new A.a([59,B.d,105,B.aP,112,B.eK,115,B.c],t.j) +B.Bz=new A.a([108,B.vL],t.r) +B.DE=new A.a([97,B.Bz,99,B.t,103,B.c],t.r) +B.pz=new A.a([97,B.dX,111,B.a7],t.r) +B.DK=new A.a([97,B.dG,104,B.eJ],t.J) +B.D1=new A.a([116,B.DK],t.O) +B.zP=new A.a([102,B.D1],t.l) +B.l9=new A.a([101,B.zP],t.x) +B.rL=new A.a([104,B.fG],t.l) +B.G5=new A.a([103,B.rL],t.x) +B.tH=new A.a([105,B.G5],t.Y) +B.Ft=new A.a([97,B.dK,104,B.eE,108,B.l9,114,B.tH,115,B.f7,116,B.eb],t.i) +B.CV=new A.a([116,B.Ft],t.J) +B.rv=new A.a([104,B.CV],t.O) +B.ta=new A.a([103,B.rv,110,B.R,115,B.em],t.e) +B.w0=new A.a([97,B.q,104,B.o,109,B.c],t.r) +B.kk=new A.a([111,B.h5],t.V) +B.JT=new A.a([109,B.aK],t.t) +B.GA=new A.a([97,B.f1,98,B.aa,112,B.e4,116,B.aj],t.e) +B.mC=new A.a([59,B.d,103,B.t],t.j) +B.oi=new A.a([114,B.mC],t.r) +B.d9=new A.a([111,B.fe],t.i) +B.E3=new A.a([97,B.oi,112,B.d9],t.e) +B.ri=new A.a([97,B.bh,99,B.e,104,B.c,113,B.fP],t.r) +B.bo=new A.a([116,B.ap],t.t) +B.vK=new A.a([59,B.d,101,B.c,102,B.c,108,B.bo],t.j) +B.u5=new A.a([105,B.vK],t.r) +B.uS=new A.a([104,B.dL,105,B.cy,114,B.u5],t.e) +B.HL=new A.a([117,B.aI],t.V) +B.By=new A.a([108,B.HL],t.i) +B.Iq=new A.a([65,B.dY,66,B.M,72,B.o,97,B.t8,98,B.fc,99,B.dF,100,B.qA,101,B.DE,102,B.d3,104,B.pz,105,B.ta,108,B.w0,109,B.kk,110,B.JT,111,B.GA,112,B.E3,114,B.M,115,B.ri,116,B.uS,117,B.By,120,B.c],t.r) +B.Gf=new A.a([59,B.d,100,B.ac],t.j) +B.yb=new A.a([59,B.d,69,B.c,97,B.h3,99,B.bv,101,B.Gf,105,B.P,110,B.e8,112,B.d9,115,B.H,121,B.c],t.j) +B.BS=new A.a([59,B.d,98,B.c,101,B.c],t.j) +B.Ch=new A.a([116,B.BS],t.r) +B.jP=new A.a([111,B.Ch],t.e) +B.fO=new A.a([119,B.o],t.t) +B.zV=new A.a([105,B.hh,110,B.c],t.r) +B.JZ=new A.a([109,B.zV],t.e) +B.kz=new A.a([65,B.q,97,B.b8,99,B.t,109,B.ab,115,B.fO,116,B.JZ,120,B.t],t.e) +B.r_=new A.a([59,B.d,111,B.cq],t.j) +B.oH=new A.a([114,B.r_],t.r) +B.Do=new A.a([104,B.p,121,B.c],t.r) +B.y3=new A.a([97,B.bY,99,B.Do,111,B.dU,121,B.c],t.r) +B.Gy=new A.a([59,B.d,102,B.c,118,B.c],t.j) +B.ww=new A.a([97,B.Gy],t.r) +B.K6=new A.a([109,B.ww],t.e) +B.zk=new A.a([59,B.d,100,B.m,101,B.at,103,B.c4,108,B.c4,110,B.z,112,B.Q,114,B.M],t.j) +B.y_=new A.a([103,B.K6,109,B.zk],t.r) +B.JJ=new A.a([109,B.as],t.i) +B.CL=new A.a([116,B.JJ],t.J) +B.lA=new A.a([101,B.CL],t.O) +B.zi=new A.a([115,B.lA],t.l) +B.BL=new A.a([108,B.zi],t.x) +B.rH=new A.a([104,B.w],t.e) +B.Ic=new A.a([108,B.BL,115,B.rH],t.t) +B.BX=new A.a([100,B.c,108,B.z],t.r) +B.xB=new A.a([59,B.d,101,B.a9],t.j) +B.E6=new A.a([97,B.Ic,101,B.ez,105,B.BX,116,B.xB],t.r) +B.C8=new A.a([116,B.p],t.t) +B.ec=new A.a([59,B.d,97,B.e],t.j) +B.mZ=new A.a([59,B.d,98,B.ec],t.j) +B.t1=new A.a([102,B.C8,108,B.mZ,112,B.y],t.r) +B.lR=new A.a([101,B.cb],t.e) +B.ys=new A.a([100,B.lR,114,B.c],t.r) +B.wh=new A.a([97,B.ys],t.e) +B.eu=new A.a([112,B.a9],t.r) +B.pK=new A.a([97,B.eu,117,B.eu],t.e) +B.l6=new A.a([101,B.bm],t.e) +B.hr=new A.a([59,B.d,101,B.c,115,B.l6],t.j) +B.KK=new A.a([98,B.hr,112,B.hr],t.r) +B.I8=new A.a([117,B.KK],t.e) +B.Fv=new A.a([101,B.c,102,B.c],t.r) +B.nG=new A.a([114,B.Fv],t.e) +B.pm=new A.a([59,B.d,97,B.nG,102,B.c],t.j) +B.w2=new A.a([99,B.pK,115,B.I8,117,B.pm],t.r) +B.JY=new A.a([109,B.N],t.e) +B.Cd=new A.a([116,B.JY],t.t) +B.tF=new A.a([105,B.bl],t.t) +B.xe=new A.a([97,B.bW],t.t) +B.qy=new A.a([99,B.e,101,B.Cd,109,B.tF,116,B.xe],t.e) +B.o4=new A.a([114,B.dj],t.r) +B.rM=new A.a([104,B.ab],t.e) +B.AO=new A.a([101,B.c5,112,B.rM],t.t) +B.CX=new A.a([116,B.AO],t.V) +B.rT=new A.a([104,B.CX],t.i) +B.FF=new A.a([103,B.rT],t.J) +B.ul=new A.a([105,B.FF],t.O) +B.C1=new A.a([97,B.ul,110,B.B],t.e) +B.zY=new A.a([97,B.o4,114,B.C1],t.e) +B.h9=new A.a([117,B.fh],t.t) +B.cr=new A.a([69,B.c,101,B.c],t.r) +B.dx=new A.a([101,B.ci],t.e) +B.yc=new A.a([59,B.d,101,B.ci,110,B.dx],t.j) +B.Da=new A.a([116,B.yc],t.r) +B.ht=new A.a([98,B.c,112,B.c],t.r) +B.fJ=new A.a([101,B.Da,105,B.V,117,B.ht],t.e) +B.xM=new A.a([59,B.d,69,B.c,100,B.m,101,B.am,109,B.h9,110,B.cr,112,B.Q,114,B.M,115,B.fJ],t.j) +B.Ay=new A.a([99,B.et],t.r) +B.yC=new A.a([111,B.t,115,B.h4],t.e) +B.Dh=new A.a([111,B.x,117,B.bt],t.e) +B.zc=new A.a([115,B.Dh],t.t) +B.mF=new A.a([49,B.c,50,B.c,51,B.c,59,B.d,69,B.c,100,B.yC,101,B.am,104,B.zc,108,B.M,109,B.h9,110,B.cr,112,B.Q,115,B.fJ],t.j) +B.tv=new A.a([98,B.xM,99,B.Ay,109,B.c,110,B.R,112,B.mF],t.r) +B.rs=new A.a([65,B.q,97,B.b8,110,B.fO],t.t) +B.Ek=new A.a([97,B.K,98,B.bh,99,B.yb,100,B.jP,101,B.kz,102,B.oH,104,B.y3,105,B.y_,108,B.M,109,B.E6,111,B.t1,112,B.wh,113,B.w2,114,B.M,115,B.qy,116,B.zY,117,B.tv,119,B.rs,122,B.a1],t.r) +B.FY=new A.a([103,B.aE],t.t) +B.BY=new A.a([114,B.FY,117,B.c],t.r) +B.Bg=new A.a([108,B.dN],t.V) +B.Ir=new A.a([52,B.c,102,B.d7],t.r) +B.lp=new A.a([101,B.Ir],t.e) +B.qN=new A.a([59,B.d,115,B.f0,118,B.c],t.j) +B.x9=new A.a([97,B.qN],t.r) +B.Gn=new A.a([114,B.lp,116,B.x9],t.e) +B.DG=new A.a([97,B.bd,115,B.H],t.t) +B.Ie=new A.a([107,B.DG],t.V) +B.uA=new A.a([99,B.Ie,110,B.cc],t.t) +B.DF=new A.a([97,B.w,115,B.H],t.e) +B.jq=new A.a([101,B.Gn,105,B.uA,107,B.DF,111,B.dI],t.t) +B.ne=new A.a([59,B.d,98,B.ec,100,B.c],t.j) +B.yT=new A.a([115,B.ne],t.r) +B.lj=new A.a([101,B.yT],t.e) +B.tu=new A.a([108,B.aQ,109,B.lj,110,B.t],t.e) +B.qU=new A.a([59,B.d,111,B.aa],t.j) +B.rt=new A.a([59,B.d,98,B.m,99,B.ar,102,B.qU],t.j) +B.y1=new A.a([101,B.C,112,B.rt,115,B.C],t.r) +B.yH=new A.a([59,B.d,100,B.b_,108,B.dq,113,B.c,114,B.el],t.j) +B.lN=new A.a([101,B.yH],t.r) +B.Bw=new A.a([108,B.lN],t.e) +B.FZ=new A.a([103,B.Bw],t.t) +B.JC=new A.a([110,B.FZ],t.V) +B.tl=new A.a([97,B.JC,100,B.m,101,B.c,109,B.as,112,B.Q,115,B.bt,116,B.c0],t.r) +B.p6=new A.a([122,B.ek],t.V) +B.l_=new A.a([101,B.p6],t.i) +B.Ad=new A.a([97,B.aQ,105,B.tl,112,B.l_],t.e) +B.mM=new A.a([99,B.fY,104,B.p,116,B.aq],t.e) +B.pZ=new A.a([120,B.t],t.e) +B.Kf=new A.a([100,B.dm],t.Y) +B.wO=new A.a([97,B.Kf],t.k) +B.lv=new A.a([101,B.wO],t._) +B.rO=new A.a([104,B.lv],t.T) +B.yh=new A.a([105,B.pZ,111,B.rO],t.t) +B.uD=new A.a([97,B.BY,98,B.aa,99,B.aN,100,B.m,101,B.Bg,102,B.e,104,B.jq,105,B.tu,111,B.y1,112,B.b7,114,B.Ad,115,B.mM,119,B.yh],t.e) +B.Hr=new A.a([99,B.S,114,B.e],t.e) +B.uy=new A.a([97,B.q,98,B.ck,104,B.o],t.t) +B.ks=new A.a([97,B.bZ,98,B.fj],t.t) +B.xG=new A.a([59,B.d,101,B.e],t.j) +B.J5=new A.a([110,B.xG],t.r) +B.nl=new A.a([114,B.J5],t.e) +B.eq=new A.a([111,B.nl,114,B.bJ],t.t) +B.xr=new A.a([99,B.eq,116,B.ap],t.t) +B.Hz=new A.a([97,B.r,108,B.c],t.r) +B.zy=new A.a([59,B.d,104,B.c,108,B.O],t.j) +B.up=new A.a([105,B.zy],t.r) +B.vC=new A.a([112,B.c8],t.O) +B.yE=new A.a([97,B.G,100,B.de,104,B.eD,108,B.ae,115,B.up,117,B.vC],t.e) +B.BV=new A.a([99,B.eq,105,B.bw,116,B.ap],t.t) +B.yz=new A.a([100,B.m,105,B.bk,114,B.en],t.e) +B.KT=new A.a([97,B.q,109,B.x],t.e) +B.qJ=new A.a([65,B.q,72,B.o,97,B.Hr,98,B.dO,99,B.a_,100,B.uy,102,B.e_,103,B.a5,104,B.ks,108,B.xr,109,B.Hz,111,B.av,112,B.yE,114,B.BV,115,B.r,116,B.yz,117,B.KT,119,B.c6],t.e) +B.oJ=new A.a([114,B.a7],t.r) +B.wv=new A.a([97,B.oJ],t.e) +B.FM=new A.a([103,B.dT],t.t) +B.wd=new A.a([97,B.ew],t.V) +B.rx=new A.a([104,B.aL],t.V) +B.Cl=new A.a([116,B.rx],t.i) +B.kp=new A.a([111,B.Cl],t.J) +B.vB=new A.a([112,B.fw],t.t) +B.jJ=new A.a([111,B.vB],t.V) +B.uR=new A.a([104,B.ab,105,B.c,114,B.jJ],t.r) +B.Kx=new A.a([59,B.d,104,B.a4],t.j) +B.IN=new A.a([110,B.dx],t.t) +B.D9=new A.a([116,B.IN],t.V) +B.my=new A.a([101,B.D9],t.i) +B.f_=new A.a([115,B.my],t.J) +B.KJ=new A.a([98,B.f_,112,B.f_],t.O) +B.uG=new A.a([105,B.fW,117,B.KJ],t.V) +B.lI=new A.a([101,B.co],t.t) +B.l3=new A.a([101,B.bM],t.i) +B.AY=new A.a([108,B.l3],t.J) +B.G8=new A.a([103,B.AY],t.O) +B.JF=new A.a([110,B.G8],t.l) +B.wm=new A.a([97,B.JF],t.x) +B.uq=new A.a([105,B.wm],t.Y) +B.FE=new A.a([104,B.lI,114,B.uq],t.V) +B.Gh=new A.a([101,B.c5,107,B.wd,110,B.kp,112,B.uR,114,B.Kx,115,B.uG,116,B.FE],t.r) +B.zB=new A.a([110,B.FM,114,B.Gh],t.e) +B.BU=new A.a([59,B.d,98,B.o,101,B.ay],t.j) +B.nb=new A.a([98,B.o,116,B.c],t.r) +B.qI=new A.a([101,B.BU,108,B.fo,114,B.nb],t.r) +B.I7=new A.a([117,B.ht],t.e) +B.yS=new A.a([115,B.I7],t.t) +B.nS=new A.a([114,B.bJ],t.t) +B.hk=new A.a([110,B.cr],t.e) +B.KI=new A.a([98,B.hk,112,B.hk],t.t) +B.kC=new A.a([99,B.e,117,B.KI],t.e) +B.wU=new A.a([97,B.R],t.e) +B.p4=new A.a([122,B.wU],t.t) +B.FP=new A.a([103,B.p4],t.V) +B.u1=new A.a([105,B.FP],t.i) +B.Fm=new A.a([65,B.q,66,B.wv,68,B.I,97,B.zB,99,B.D,100,B.I,101,B.qI,102,B.e,108,B.bo,110,B.yS,111,B.A,112,B.nS,114,B.bo,115,B.kC,122,B.u1],t.e) +B.lY=new A.a([101,B.at],t.r) +B.rf=new A.a([98,B.o,103,B.lY],t.e) +B.l0=new A.a([101,B.bY],t.t) +B.EK=new A.a([100,B.rf,105,B.l0],t.t) +B.xz=new A.a([59,B.d,101,B.eB],t.j) +B.E8=new A.a([99,B.aJ,101,B.EK,102,B.e,111,B.A,112,B.c,114,B.xz,115,B.r],t.r) +B.cg=new A.a([65,B.q,97,B.q],t.t) +B.r2=new A.a([102,B.c,108,B.ae],t.r) +B.E_=new A.a([100,B.m,112,B.r2,116,B.c0],t.e) +B.yw=new A.a([99,B.e,113,B.cj],t.e) +B.pT=new A.a([112,B.Q,116,B.ap],t.t) +B.uF=new A.a([99,B.dl,100,B.bo,102,B.e,104,B.cg,105,B.c,108,B.cg,109,B.au,110,B.c1,111,B.E_,114,B.cg,115,B.yw,117,B.pT,118,B.a8,119,B.b4],t.r) +B.vI=new A.a([117,B.aO,121,B.c],t.r) +B.AF=new A.a([99,B.vI],t.e) +B.Dq=new A.a([99,B.D,109,B.x],t.e) +B.Gi=new A.a([97,B.AF,99,B.a_,101,B.N,102,B.e,105,B.p,111,B.A,115,B.r,117,B.Dq],t.e) +B.w5=new A.a([101,B.bn,116,B.C],t.e) +B.A9=new A.a([106,B.c],t.r) +B.C2=new A.a([106,B.c,110,B.A9],t.r) +B.vJ=new A.a([97,B.K,99,B.bg,100,B.m,101,B.w5,102,B.e,104,B.p,105,B.fT,111,B.A,115,B.r,119,B.C2],t.e) +B.kS=new A.a([65,B.mX,66,B.A8,67,B.rZ,68,B.C0,69,B.ym,70,B.kT,71,B.Dw,72,B.y8,73,B.KF,74,B.px,75,B.E7,76,B.Gg,77,B.Gj,78,B.uO,79,B.xi,80,B.xZ,81,B.r5,82,B.vZ,83,B.KE,84,B.uL,85,B.y4,86,B.F7,87,B.p9,88,B.rq,89,B.mP,90,B.uK,97,B.kD,98,B.pS,99,B.pL,100,B.Gt,101,B.uB,102,B.yk,103,B.K7,104,B.Fj,105,B.yv,106,B.BQ,107,B.JH,108,B.rh,109,B.pq,110,B.re,111,B.Ky,112,B.DT,113,B.vS,114,B.Iq,115,B.Ek,116,B.uD,117,B.qJ,118,B.Fm,119,B.E8,120,B.uF,121,B.Gi,122,B.vJ],t.e) +B.by=new A.ec(2,"severe") +B.hv=new A.ec(1,"warning") +B.hu=new A.ec(0,"info") +B.pd=new A.a([B.by,"error",B.hv,"warning",B.hu,"info"],t.ha) +B.dZ=new A.a([B.by,"\x1b[31m",B.hv,"\x1b[35m",B.hu,"\x1b[32m"],t.ha) +B.KY={li:0,dt:1,dd:2} +B.jd=s(["li"],t.s) +B.cX=s(["dt","dd"],t.s) +B.qF=new A.r(B.KY,[B.jd,B.cX,B.cX],A.a_("r>")) +B.ra=new A.a([0,"\ufffd",13,"\r",128,"\u20ac",129,"\x81",130,"\u201a",131,"\u0192",132,"\u201e",133,"\u2026",134,"\u2020",135,"\u2021",136,"\u02c6",137,"\u2030",138,"\u0160",139,"\u2039",140,"\u0152",141,"\x8d",142,"\u017d",143,"\x8f",144,"\x90",145,"\u2018",146,"\u2019",147,"\u201c",148,"\u201d",149,"\u2022",150,"\u2013",151,"\u2014",152,"\u02dc",153,"\u2122",154,"\u0161",155,"\u203a",156,"\u0153",157,"\x9d",158,"\u017e",159,"\u0178"],t.mj) +B.rn=new A.a([8,"\\b",9,"\\t",10,"\\n",11,"\\v",12,"\\f",13,"\\r",34,'\\"',39,"\\'",92,"\\\\"],t.mj) +B.L0={altglyph:0,altglyphdef:1,altglyphitem:2,animatecolor:3,animatemotion:4,animatetransform:5,clippath:6,feblend:7,fecolormatrix:8,fecomponenttransfer:9,fecomposite:10,feconvolvematrix:11,fediffuselighting:12,fedisplacementmap:13,fedistantlight:14,feflood:15,fefunca:16,fefuncb:17,fefuncg:18,fefuncr:19,fegaussianblur:20,feimage:21,femerge:22,femergenode:23,femorphology:24,feoffset:25,fepointlight:26,fespecularlighting:27,fespotlight:28,fetile:29,feturbulence:30,foreignobject:31,glyphref:32,lineargradient:33,radialgradient:34,textpath:35} +B.rp=new A.r(B.L0,["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"],t.o) +B.L9={"xlink:actuate":0,"xlink:arcrole":1,"xlink:href":2,"xlink:role":3,"xlink:show":4,"xlink:title":5,"xlink:type":6,"xml:base":7,"xml:lang":8,"xml:space":9,xmlns:10,"xmlns:xlink":11} +B.ib=new A.aO("xlink","actuate","http://www.w3.org/1999/xlink") +B.i5=new A.aO("xlink","arcrole","http://www.w3.org/1999/xlink") +B.i2=new A.aO("xlink","href","http://www.w3.org/1999/xlink") +B.i8=new A.aO("xlink","role","http://www.w3.org/1999/xlink") +B.i3=new A.aO("xlink","show","http://www.w3.org/1999/xlink") +B.i9=new A.aO("xlink","title","http://www.w3.org/1999/xlink") +B.ia=new A.aO("xlink","type","http://www.w3.org/1999/xlink") +B.i1=new A.aO("xml","base","http://www.w3.org/XML/1998/namespace") +B.i4=new A.aO("xml","lang","http://www.w3.org/XML/1998/namespace") +B.i0=new A.aO("xml","space","http://www.w3.org/XML/1998/namespace") +B.i6=new A.aO(null,"xmlns","http://www.w3.org/2000/xmlns/") +B.i7=new A.aO("xmlns","xlink","http://www.w3.org/2000/xmlns/") +B.vG=new A.r(B.L9,[B.ib,B.i5,B.i2,B.i8,B.i3,B.i9,B.ia,B.i1,B.i4,B.i0,B.i6,B.i7],A.a_("r")) +B.L8={"437":0,"850":1,"852":2,"855":3,"857":4,"860":5,"861":6,"862":7,"863":8,"865":9,"866":10,"869":11,ansix341968:12,ansix341986:13,arabic:14,ascii:15,asmo708:16,big5:17,big5hkscs:18,chinese:19,cp037:20,cp1026:21,cp154:22,cp367:23,cp424:24,cp437:25,cp500:26,cp775:27,cp819:28,cp850:29,cp852:30,cp855:31,cp857:32,cp860:33,cp861:34,cp862:35,cp863:36,cp864:37,cp865:38,cp866:39,cp869:40,cp936:41,cpgr:42,cpis:43,csascii:44,csbig5:45,cseuckr:46,cseucpkdfmtjapanese:47,csgb2312:48,cshproman8:49,csibm037:50,csibm1026:51,csibm424:52,csibm500:53,csibm855:54,csibm857:55,csibm860:56,csibm861:57,csibm863:58,csibm864:59,csibm865:60,csibm866:61,csibm869:62,csiso2022jp:63,csiso2022jp2:64,csiso2022kr:65,csiso58gb231280:66,csisolatin1:67,csisolatin2:68,csisolatin3:69,csisolatin4:70,csisolatin5:71,csisolatin6:72,csisolatinarabic:73,csisolatincyrillic:74,csisolatingreek:75,csisolatinhebrew:76,cskoi8r:77,csksc56011987:78,cspc775baltic:79,cspc850multilingual:80,cspc862latinhebrew:81,cspc8codepage437:82,cspcp852:83,csptcp154:84,csshiftjis:85,csunicode11utf7:86,cyrillic:87,cyrillicasian:88,ebcdiccpbe:89,ebcdiccpca:90,ebcdiccpch:91,ebcdiccphe:92,ebcdiccpnl:93,ebcdiccpus:94,ebcdiccpwt:95,ecma114:96,ecma118:97,elot928:98,eucjp:99,euckr:100,extendedunixcodepackedformatforjapanese:101,gb18030:102,gb2312:103,gb231280:104,gbk:105,greek:106,greek8:107,hebrew:108,hproman8:109,hzgb2312:110,ibm037:111,ibm1026:112,ibm367:113,ibm424:114,ibm437:115,ibm500:116,ibm775:117,ibm819:118,ibm850:119,ibm852:120,ibm855:121,ibm857:122,ibm860:123,ibm861:124,ibm862:125,ibm863:126,ibm864:127,ibm865:128,ibm866:129,ibm869:130,iso2022jp:131,iso2022jp2:132,iso2022kr:133,iso646irv1991:134,iso646us:135,iso88591:136,iso885910:137,iso8859101992:138,iso885911987:139,iso885913:140,iso885914:141,iso8859141998:142,iso885915:143,iso885916:144,iso8859162001:145,iso88592:146,iso885921987:147,iso88593:148,iso885931988:149,iso88594:150,iso885941988:151,iso88595:152,iso885951988:153,iso88596:154,iso885961987:155,iso88597:156,iso885971987:157,iso88598:158,iso885981988:159,iso88599:160,iso885991989:161,isoceltic:162,isoir100:163,isoir101:164,isoir109:165,isoir110:166,isoir126:167,isoir127:168,isoir138:169,isoir144:170,isoir148:171,isoir149:172,isoir157:173,isoir199:174,isoir226:175,isoir58:176,isoir6:177,koi8r:178,koi8u:179,korean:180,ksc5601:181,ksc56011987:182,ksc56011989:183,l1:184,l10:185,l2:186,l3:187,l4:188,l5:189,l6:190,l8:191,latin1:192,latin10:193,latin2:194,latin3:195,latin4:196,latin5:197,latin6:198,latin8:199,latin9:200,ms936:201,mskanji:202,pt154:203,ptcp154:204,r8:205,roman8:206,shiftjis:207,tis620:208,unicode11utf7:209,us:210,usascii:211,utf16:212,utf16be:213,utf16le:214,utf8:215,windows1250:216,windows1251:217,windows1252:218,windows1253:219,windows1254:220,windows1255:221,windows1256:222,windows1257:223,windows1258:224,windows936:225,"x-x-big5":226} +B.vX=new A.r(B.L8,["cp437","cp850","cp852","cp855","cp857","cp860","cp861","cp862","cp863","cp865","cp866","cp869","ascii","ascii","iso8859-6","ascii","iso8859-6","big5","big5hkscs","gbk","cp037","cp1026","ptcp154","ascii","cp424","cp437","cp500","cp775","windows-1252","cp850","cp852","cp855","cp857","cp860","cp861","cp862","cp863","cp864","cp865","cp866","cp869","gbk","cp869","cp861","ascii","big5","cp949","euc_jp","gbk","hp-roman8","cp037","cp1026","cp424","cp500","cp855","cp857","cp860","cp861","cp863","cp864","cp865","cp866","cp869","iso2022_jp","iso2022_jp_2","iso2022_kr","gbk","windows-1252","iso8859-2","iso8859-3","iso8859-4","windows-1254","iso8859-10","iso8859-6","iso8859-5","iso8859-7","iso8859-8","koi8-r","cp949","cp775","cp850","cp862","cp437","cp852","ptcp154","shift_jis","utf-7","iso8859-5","ptcp154","cp500","cp037","cp500","cp424","cp037","cp037","cp037","iso8859-6","iso8859-7","iso8859-7","euc_jp","cp949","euc_jp","gb18030","gbk","gbk","gbk","iso8859-7","iso8859-7","iso8859-8","hp-roman8","hz","cp037","cp1026","ascii","cp424","cp437","cp500","cp775","windows-1252","cp850","cp852","cp855","cp857","cp860","cp861","cp862","cp863","cp864","cp865","cp866","cp869","iso2022_jp","iso2022_jp_2","iso2022_kr","ascii","ascii","windows-1252","iso8859-10","iso8859-10","windows-1252","iso8859-13","iso8859-14","iso8859-14","iso8859-15","iso8859-16","iso8859-16","iso8859-2","iso8859-2","iso8859-3","iso8859-3","iso8859-4","iso8859-4","iso8859-5","iso8859-5","iso8859-6","iso8859-6","iso8859-7","iso8859-7","iso8859-8","iso8859-8","windows-1254","windows-1254","iso8859-14","windows-1252","iso8859-2","iso8859-3","iso8859-4","iso8859-7","iso8859-6","iso8859-8","iso8859-5","windows-1254","cp949","iso8859-10","iso8859-14","iso8859-16","gbk","ascii","koi8-r","koi8-u","cp949","cp949","cp949","cp949","windows-1252","iso8859-16","iso8859-2","iso8859-3","iso8859-4","windows-1254","iso8859-10","iso8859-14","windows-1252","iso8859-16","iso8859-2","iso8859-3","iso8859-4","windows-1254","iso8859-10","iso8859-14","iso8859-15","gbk","shift_jis","ptcp154","ptcp154","hp-roman8","hp-roman8","shift_jis","cp874","utf-7","ascii","ascii","utf-16","utf-16-be","utf-16-le","utf-8","cp1250","cp1251","cp1252","cp1253","cp1254","cp1255","cp1256","cp1257","cp1258","gbk","big5"],t.o) +B.Ac=new A.r(B.aS,[],t.o) +B.bi=new A.r(B.aS,[],A.a_("r")) +B.fa=new A.r(B.aS,[],A.a_("r")) +B.KW={AElig:0,"AElig;":1,AMP:2,"AMP;":3,Aacute:4,"Aacute;":5,"Abreve;":6,Acirc:7,"Acirc;":8,"Acy;":9,"Afr;":10,Agrave:11,"Agrave;":12,"Alpha;":13,"Amacr;":14,"And;":15,"Aogon;":16,"Aopf;":17,"ApplyFunction;":18,Aring:19,"Aring;":20,"Ascr;":21,"Assign;":22,Atilde:23,"Atilde;":24,Auml:25,"Auml;":26,"Backslash;":27,"Barv;":28,"Barwed;":29,"Bcy;":30,"Because;":31,"Bernoullis;":32,"Beta;":33,"Bfr;":34,"Bopf;":35,"Breve;":36,"Bscr;":37,"Bumpeq;":38,"CHcy;":39,COPY:40,"COPY;":41,"Cacute;":42,"Cap;":43,"CapitalDifferentialD;":44,"Cayleys;":45,"Ccaron;":46,Ccedil:47,"Ccedil;":48,"Ccirc;":49,"Cconint;":50,"Cdot;":51,"Cedilla;":52,"CenterDot;":53,"Cfr;":54,"Chi;":55,"CircleDot;":56,"CircleMinus;":57,"CirclePlus;":58,"CircleTimes;":59,"ClockwiseContourIntegral;":60,"CloseCurlyDoubleQuote;":61,"CloseCurlyQuote;":62,"Colon;":63,"Colone;":64,"Congruent;":65,"Conint;":66,"ContourIntegral;":67,"Copf;":68,"Coproduct;":69,"CounterClockwiseContourIntegral;":70,"Cross;":71,"Cscr;":72,"Cup;":73,"CupCap;":74,"DD;":75,"DDotrahd;":76,"DJcy;":77,"DScy;":78,"DZcy;":79,"Dagger;":80,"Darr;":81,"Dashv;":82,"Dcaron;":83,"Dcy;":84,"Del;":85,"Delta;":86,"Dfr;":87,"DiacriticalAcute;":88,"DiacriticalDot;":89,"DiacriticalDoubleAcute;":90,"DiacriticalGrave;":91,"DiacriticalTilde;":92,"Diamond;":93,"DifferentialD;":94,"Dopf;":95,"Dot;":96,"DotDot;":97,"DotEqual;":98,"DoubleContourIntegral;":99,"DoubleDot;":100,"DoubleDownArrow;":101,"DoubleLeftArrow;":102,"DoubleLeftRightArrow;":103,"DoubleLeftTee;":104,"DoubleLongLeftArrow;":105,"DoubleLongLeftRightArrow;":106,"DoubleLongRightArrow;":107,"DoubleRightArrow;":108,"DoubleRightTee;":109,"DoubleUpArrow;":110,"DoubleUpDownArrow;":111,"DoubleVerticalBar;":112,"DownArrow;":113,"DownArrowBar;":114,"DownArrowUpArrow;":115,"DownBreve;":116,"DownLeftRightVector;":117,"DownLeftTeeVector;":118,"DownLeftVector;":119,"DownLeftVectorBar;":120,"DownRightTeeVector;":121,"DownRightVector;":122,"DownRightVectorBar;":123,"DownTee;":124,"DownTeeArrow;":125,"Downarrow;":126,"Dscr;":127,"Dstrok;":128,"ENG;":129,ETH:130,"ETH;":131,Eacute:132,"Eacute;":133,"Ecaron;":134,Ecirc:135,"Ecirc;":136,"Ecy;":137,"Edot;":138,"Efr;":139,Egrave:140,"Egrave;":141,"Element;":142,"Emacr;":143,"EmptySmallSquare;":144,"EmptyVerySmallSquare;":145,"Eogon;":146,"Eopf;":147,"Epsilon;":148,"Equal;":149,"EqualTilde;":150,"Equilibrium;":151,"Escr;":152,"Esim;":153,"Eta;":154,Euml:155,"Euml;":156,"Exists;":157,"ExponentialE;":158,"Fcy;":159,"Ffr;":160,"FilledSmallSquare;":161,"FilledVerySmallSquare;":162,"Fopf;":163,"ForAll;":164,"Fouriertrf;":165,"Fscr;":166,"GJcy;":167,GT:168,"GT;":169,"Gamma;":170,"Gammad;":171,"Gbreve;":172,"Gcedil;":173,"Gcirc;":174,"Gcy;":175,"Gdot;":176,"Gfr;":177,"Gg;":178,"Gopf;":179,"GreaterEqual;":180,"GreaterEqualLess;":181,"GreaterFullEqual;":182,"GreaterGreater;":183,"GreaterLess;":184,"GreaterSlantEqual;":185,"GreaterTilde;":186,"Gscr;":187,"Gt;":188,"HARDcy;":189,"Hacek;":190,"Hat;":191,"Hcirc;":192,"Hfr;":193,"HilbertSpace;":194,"Hopf;":195,"HorizontalLine;":196,"Hscr;":197,"Hstrok;":198,"HumpDownHump;":199,"HumpEqual;":200,"IEcy;":201,"IJlig;":202,"IOcy;":203,Iacute:204,"Iacute;":205,Icirc:206,"Icirc;":207,"Icy;":208,"Idot;":209,"Ifr;":210,Igrave:211,"Igrave;":212,"Im;":213,"Imacr;":214,"ImaginaryI;":215,"Implies;":216,"Int;":217,"Integral;":218,"Intersection;":219,"InvisibleComma;":220,"InvisibleTimes;":221,"Iogon;":222,"Iopf;":223,"Iota;":224,"Iscr;":225,"Itilde;":226,"Iukcy;":227,Iuml:228,"Iuml;":229,"Jcirc;":230,"Jcy;":231,"Jfr;":232,"Jopf;":233,"Jscr;":234,"Jsercy;":235,"Jukcy;":236,"KHcy;":237,"KJcy;":238,"Kappa;":239,"Kcedil;":240,"Kcy;":241,"Kfr;":242,"Kopf;":243,"Kscr;":244,"LJcy;":245,LT:246,"LT;":247,"Lacute;":248,"Lambda;":249,"Lang;":250,"Laplacetrf;":251,"Larr;":252,"Lcaron;":253,"Lcedil;":254,"Lcy;":255,"LeftAngleBracket;":256,"LeftArrow;":257,"LeftArrowBar;":258,"LeftArrowRightArrow;":259,"LeftCeiling;":260,"LeftDoubleBracket;":261,"LeftDownTeeVector;":262,"LeftDownVector;":263,"LeftDownVectorBar;":264,"LeftFloor;":265,"LeftRightArrow;":266,"LeftRightVector;":267,"LeftTee;":268,"LeftTeeArrow;":269,"LeftTeeVector;":270,"LeftTriangle;":271,"LeftTriangleBar;":272,"LeftTriangleEqual;":273,"LeftUpDownVector;":274,"LeftUpTeeVector;":275,"LeftUpVector;":276,"LeftUpVectorBar;":277,"LeftVector;":278,"LeftVectorBar;":279,"Leftarrow;":280,"Leftrightarrow;":281,"LessEqualGreater;":282,"LessFullEqual;":283,"LessGreater;":284,"LessLess;":285,"LessSlantEqual;":286,"LessTilde;":287,"Lfr;":288,"Ll;":289,"Lleftarrow;":290,"Lmidot;":291,"LongLeftArrow;":292,"LongLeftRightArrow;":293,"LongRightArrow;":294,"Longleftarrow;":295,"Longleftrightarrow;":296,"Longrightarrow;":297,"Lopf;":298,"LowerLeftArrow;":299,"LowerRightArrow;":300,"Lscr;":301,"Lsh;":302,"Lstrok;":303,"Lt;":304,"Map;":305,"Mcy;":306,"MediumSpace;":307,"Mellintrf;":308,"Mfr;":309,"MinusPlus;":310,"Mopf;":311,"Mscr;":312,"Mu;":313,"NJcy;":314,"Nacute;":315,"Ncaron;":316,"Ncedil;":317,"Ncy;":318,"NegativeMediumSpace;":319,"NegativeThickSpace;":320,"NegativeThinSpace;":321,"NegativeVeryThinSpace;":322,"NestedGreaterGreater;":323,"NestedLessLess;":324,"NewLine;":325,"Nfr;":326,"NoBreak;":327,"NonBreakingSpace;":328,"Nopf;":329,"Not;":330,"NotCongruent;":331,"NotCupCap;":332,"NotDoubleVerticalBar;":333,"NotElement;":334,"NotEqual;":335,"NotEqualTilde;":336,"NotExists;":337,"NotGreater;":338,"NotGreaterEqual;":339,"NotGreaterFullEqual;":340,"NotGreaterGreater;":341,"NotGreaterLess;":342,"NotGreaterSlantEqual;":343,"NotGreaterTilde;":344,"NotHumpDownHump;":345,"NotHumpEqual;":346,"NotLeftTriangle;":347,"NotLeftTriangleBar;":348,"NotLeftTriangleEqual;":349,"NotLess;":350,"NotLessEqual;":351,"NotLessGreater;":352,"NotLessLess;":353,"NotLessSlantEqual;":354,"NotLessTilde;":355,"NotNestedGreaterGreater;":356,"NotNestedLessLess;":357,"NotPrecedes;":358,"NotPrecedesEqual;":359,"NotPrecedesSlantEqual;":360,"NotReverseElement;":361,"NotRightTriangle;":362,"NotRightTriangleBar;":363,"NotRightTriangleEqual;":364,"NotSquareSubset;":365,"NotSquareSubsetEqual;":366,"NotSquareSuperset;":367,"NotSquareSupersetEqual;":368,"NotSubset;":369,"NotSubsetEqual;":370,"NotSucceeds;":371,"NotSucceedsEqual;":372,"NotSucceedsSlantEqual;":373,"NotSucceedsTilde;":374,"NotSuperset;":375,"NotSupersetEqual;":376,"NotTilde;":377,"NotTildeEqual;":378,"NotTildeFullEqual;":379,"NotTildeTilde;":380,"NotVerticalBar;":381,"Nscr;":382,Ntilde:383,"Ntilde;":384,"Nu;":385,"OElig;":386,Oacute:387,"Oacute;":388,Ocirc:389,"Ocirc;":390,"Ocy;":391,"Odblac;":392,"Ofr;":393,Ograve:394,"Ograve;":395,"Omacr;":396,"Omega;":397,"Omicron;":398,"Oopf;":399,"OpenCurlyDoubleQuote;":400,"OpenCurlyQuote;":401,"Or;":402,"Oscr;":403,Oslash:404,"Oslash;":405,Otilde:406,"Otilde;":407,"Otimes;":408,Ouml:409,"Ouml;":410,"OverBar;":411,"OverBrace;":412,"OverBracket;":413,"OverParenthesis;":414,"PartialD;":415,"Pcy;":416,"Pfr;":417,"Phi;":418,"Pi;":419,"PlusMinus;":420,"Poincareplane;":421,"Popf;":422,"Pr;":423,"Precedes;":424,"PrecedesEqual;":425,"PrecedesSlantEqual;":426,"PrecedesTilde;":427,"Prime;":428,"Product;":429,"Proportion;":430,"Proportional;":431,"Pscr;":432,"Psi;":433,QUOT:434,"QUOT;":435,"Qfr;":436,"Qopf;":437,"Qscr;":438,"RBarr;":439,REG:440,"REG;":441,"Racute;":442,"Rang;":443,"Rarr;":444,"Rarrtl;":445,"Rcaron;":446,"Rcedil;":447,"Rcy;":448,"Re;":449,"ReverseElement;":450,"ReverseEquilibrium;":451,"ReverseUpEquilibrium;":452,"Rfr;":453,"Rho;":454,"RightAngleBracket;":455,"RightArrow;":456,"RightArrowBar;":457,"RightArrowLeftArrow;":458,"RightCeiling;":459,"RightDoubleBracket;":460,"RightDownTeeVector;":461,"RightDownVector;":462,"RightDownVectorBar;":463,"RightFloor;":464,"RightTee;":465,"RightTeeArrow;":466,"RightTeeVector;":467,"RightTriangle;":468,"RightTriangleBar;":469,"RightTriangleEqual;":470,"RightUpDownVector;":471,"RightUpTeeVector;":472,"RightUpVector;":473,"RightUpVectorBar;":474,"RightVector;":475,"RightVectorBar;":476,"Rightarrow;":477,"Ropf;":478,"RoundImplies;":479,"Rrightarrow;":480,"Rscr;":481,"Rsh;":482,"RuleDelayed;":483,"SHCHcy;":484,"SHcy;":485,"SOFTcy;":486,"Sacute;":487,"Sc;":488,"Scaron;":489,"Scedil;":490,"Scirc;":491,"Scy;":492,"Sfr;":493,"ShortDownArrow;":494,"ShortLeftArrow;":495,"ShortRightArrow;":496,"ShortUpArrow;":497,"Sigma;":498,"SmallCircle;":499,"Sopf;":500,"Sqrt;":501,"Square;":502,"SquareIntersection;":503,"SquareSubset;":504,"SquareSubsetEqual;":505,"SquareSuperset;":506,"SquareSupersetEqual;":507,"SquareUnion;":508,"Sscr;":509,"Star;":510,"Sub;":511,"Subset;":512,"SubsetEqual;":513,"Succeeds;":514,"SucceedsEqual;":515,"SucceedsSlantEqual;":516,"SucceedsTilde;":517,"SuchThat;":518,"Sum;":519,"Sup;":520,"Superset;":521,"SupersetEqual;":522,"Supset;":523,THORN:524,"THORN;":525,"TRADE;":526,"TSHcy;":527,"TScy;":528,"Tab;":529,"Tau;":530,"Tcaron;":531,"Tcedil;":532,"Tcy;":533,"Tfr;":534,"Therefore;":535,"Theta;":536,"ThickSpace;":537,"ThinSpace;":538,"Tilde;":539,"TildeEqual;":540,"TildeFullEqual;":541,"TildeTilde;":542,"Topf;":543,"TripleDot;":544,"Tscr;":545,"Tstrok;":546,Uacute:547,"Uacute;":548,"Uarr;":549,"Uarrocir;":550,"Ubrcy;":551,"Ubreve;":552,Ucirc:553,"Ucirc;":554,"Ucy;":555,"Udblac;":556,"Ufr;":557,Ugrave:558,"Ugrave;":559,"Umacr;":560,"UnderBar;":561,"UnderBrace;":562,"UnderBracket;":563,"UnderParenthesis;":564,"Union;":565,"UnionPlus;":566,"Uogon;":567,"Uopf;":568,"UpArrow;":569,"UpArrowBar;":570,"UpArrowDownArrow;":571,"UpDownArrow;":572,"UpEquilibrium;":573,"UpTee;":574,"UpTeeArrow;":575,"Uparrow;":576,"Updownarrow;":577,"UpperLeftArrow;":578,"UpperRightArrow;":579,"Upsi;":580,"Upsilon;":581,"Uring;":582,"Uscr;":583,"Utilde;":584,Uuml:585,"Uuml;":586,"VDash;":587,"Vbar;":588,"Vcy;":589,"Vdash;":590,"Vdashl;":591,"Vee;":592,"Verbar;":593,"Vert;":594,"VerticalBar;":595,"VerticalLine;":596,"VerticalSeparator;":597,"VerticalTilde;":598,"VeryThinSpace;":599,"Vfr;":600,"Vopf;":601,"Vscr;":602,"Vvdash;":603,"Wcirc;":604,"Wedge;":605,"Wfr;":606,"Wopf;":607,"Wscr;":608,"Xfr;":609,"Xi;":610,"Xopf;":611,"Xscr;":612,"YAcy;":613,"YIcy;":614,"YUcy;":615,Yacute:616,"Yacute;":617,"Ycirc;":618,"Ycy;":619,"Yfr;":620,"Yopf;":621,"Yscr;":622,"Yuml;":623,"ZHcy;":624,"Zacute;":625,"Zcaron;":626,"Zcy;":627,"Zdot;":628,"ZeroWidthSpace;":629,"Zeta;":630,"Zfr;":631,"Zopf;":632,"Zscr;":633,aacute:634,"aacute;":635,"abreve;":636,"ac;":637,"acE;":638,"acd;":639,acirc:640,"acirc;":641,acute:642,"acute;":643,"acy;":644,aelig:645,"aelig;":646,"af;":647,"afr;":648,agrave:649,"agrave;":650,"alefsym;":651,"aleph;":652,"alpha;":653,"amacr;":654,"amalg;":655,amp:656,"amp;":657,"and;":658,"andand;":659,"andd;":660,"andslope;":661,"andv;":662,"ang;":663,"ange;":664,"angle;":665,"angmsd;":666,"angmsdaa;":667,"angmsdab;":668,"angmsdac;":669,"angmsdad;":670,"angmsdae;":671,"angmsdaf;":672,"angmsdag;":673,"angmsdah;":674,"angrt;":675,"angrtvb;":676,"angrtvbd;":677,"angsph;":678,"angst;":679,"angzarr;":680,"aogon;":681,"aopf;":682,"ap;":683,"apE;":684,"apacir;":685,"ape;":686,"apid;":687,"apos;":688,"approx;":689,"approxeq;":690,aring:691,"aring;":692,"ascr;":693,"ast;":694,"asymp;":695,"asympeq;":696,atilde:697,"atilde;":698,auml:699,"auml;":700,"awconint;":701,"awint;":702,"bNot;":703,"backcong;":704,"backepsilon;":705,"backprime;":706,"backsim;":707,"backsimeq;":708,"barvee;":709,"barwed;":710,"barwedge;":711,"bbrk;":712,"bbrktbrk;":713,"bcong;":714,"bcy;":715,"bdquo;":716,"becaus;":717,"because;":718,"bemptyv;":719,"bepsi;":720,"bernou;":721,"beta;":722,"beth;":723,"between;":724,"bfr;":725,"bigcap;":726,"bigcirc;":727,"bigcup;":728,"bigodot;":729,"bigoplus;":730,"bigotimes;":731,"bigsqcup;":732,"bigstar;":733,"bigtriangledown;":734,"bigtriangleup;":735,"biguplus;":736,"bigvee;":737,"bigwedge;":738,"bkarow;":739,"blacklozenge;":740,"blacksquare;":741,"blacktriangle;":742,"blacktriangledown;":743,"blacktriangleleft;":744,"blacktriangleright;":745,"blank;":746,"blk12;":747,"blk14;":748,"blk34;":749,"block;":750,"bne;":751,"bnequiv;":752,"bnot;":753,"bopf;":754,"bot;":755,"bottom;":756,"bowtie;":757,"boxDL;":758,"boxDR;":759,"boxDl;":760,"boxDr;":761,"boxH;":762,"boxHD;":763,"boxHU;":764,"boxHd;":765,"boxHu;":766,"boxUL;":767,"boxUR;":768,"boxUl;":769,"boxUr;":770,"boxV;":771,"boxVH;":772,"boxVL;":773,"boxVR;":774,"boxVh;":775,"boxVl;":776,"boxVr;":777,"boxbox;":778,"boxdL;":779,"boxdR;":780,"boxdl;":781,"boxdr;":782,"boxh;":783,"boxhD;":784,"boxhU;":785,"boxhd;":786,"boxhu;":787,"boxminus;":788,"boxplus;":789,"boxtimes;":790,"boxuL;":791,"boxuR;":792,"boxul;":793,"boxur;":794,"boxv;":795,"boxvH;":796,"boxvL;":797,"boxvR;":798,"boxvh;":799,"boxvl;":800,"boxvr;":801,"bprime;":802,"breve;":803,brvbar:804,"brvbar;":805,"bscr;":806,"bsemi;":807,"bsim;":808,"bsime;":809,"bsol;":810,"bsolb;":811,"bsolhsub;":812,"bull;":813,"bullet;":814,"bump;":815,"bumpE;":816,"bumpe;":817,"bumpeq;":818,"cacute;":819,"cap;":820,"capand;":821,"capbrcup;":822,"capcap;":823,"capcup;":824,"capdot;":825,"caps;":826,"caret;":827,"caron;":828,"ccaps;":829,"ccaron;":830,ccedil:831,"ccedil;":832,"ccirc;":833,"ccups;":834,"ccupssm;":835,"cdot;":836,cedil:837,"cedil;":838,"cemptyv;":839,cent:840,"cent;":841,"centerdot;":842,"cfr;":843,"chcy;":844,"check;":845,"checkmark;":846,"chi;":847,"cir;":848,"cirE;":849,"circ;":850,"circeq;":851,"circlearrowleft;":852,"circlearrowright;":853,"circledR;":854,"circledS;":855,"circledast;":856,"circledcirc;":857,"circleddash;":858,"cire;":859,"cirfnint;":860,"cirmid;":861,"cirscir;":862,"clubs;":863,"clubsuit;":864,"colon;":865,"colone;":866,"coloneq;":867,"comma;":868,"commat;":869,"comp;":870,"compfn;":871,"complement;":872,"complexes;":873,"cong;":874,"congdot;":875,"conint;":876,"copf;":877,"coprod;":878,copy:879,"copy;":880,"copysr;":881,"crarr;":882,"cross;":883,"cscr;":884,"csub;":885,"csube;":886,"csup;":887,"csupe;":888,"ctdot;":889,"cudarrl;":890,"cudarrr;":891,"cuepr;":892,"cuesc;":893,"cularr;":894,"cularrp;":895,"cup;":896,"cupbrcap;":897,"cupcap;":898,"cupcup;":899,"cupdot;":900,"cupor;":901,"cups;":902,"curarr;":903,"curarrm;":904,"curlyeqprec;":905,"curlyeqsucc;":906,"curlyvee;":907,"curlywedge;":908,curren:909,"curren;":910,"curvearrowleft;":911,"curvearrowright;":912,"cuvee;":913,"cuwed;":914,"cwconint;":915,"cwint;":916,"cylcty;":917,"dArr;":918,"dHar;":919,"dagger;":920,"daleth;":921,"darr;":922,"dash;":923,"dashv;":924,"dbkarow;":925,"dblac;":926,"dcaron;":927,"dcy;":928,"dd;":929,"ddagger;":930,"ddarr;":931,"ddotseq;":932,deg:933,"deg;":934,"delta;":935,"demptyv;":936,"dfisht;":937,"dfr;":938,"dharl;":939,"dharr;":940,"diam;":941,"diamond;":942,"diamondsuit;":943,"diams;":944,"die;":945,"digamma;":946,"disin;":947,"div;":948,divide:949,"divide;":950,"divideontimes;":951,"divonx;":952,"djcy;":953,"dlcorn;":954,"dlcrop;":955,"dollar;":956,"dopf;":957,"dot;":958,"doteq;":959,"doteqdot;":960,"dotminus;":961,"dotplus;":962,"dotsquare;":963,"doublebarwedge;":964,"downarrow;":965,"downdownarrows;":966,"downharpoonleft;":967,"downharpoonright;":968,"drbkarow;":969,"drcorn;":970,"drcrop;":971,"dscr;":972,"dscy;":973,"dsol;":974,"dstrok;":975,"dtdot;":976,"dtri;":977,"dtrif;":978,"duarr;":979,"duhar;":980,"dwangle;":981,"dzcy;":982,"dzigrarr;":983,"eDDot;":984,"eDot;":985,eacute:986,"eacute;":987,"easter;":988,"ecaron;":989,"ecir;":990,ecirc:991,"ecirc;":992,"ecolon;":993,"ecy;":994,"edot;":995,"ee;":996,"efDot;":997,"efr;":998,"eg;":999,egrave:1000,"egrave;":1001,"egs;":1002,"egsdot;":1003,"el;":1004,"elinters;":1005,"ell;":1006,"els;":1007,"elsdot;":1008,"emacr;":1009,"empty;":1010,"emptyset;":1011,"emptyv;":1012,"emsp13;":1013,"emsp14;":1014,"emsp;":1015,"eng;":1016,"ensp;":1017,"eogon;":1018,"eopf;":1019,"epar;":1020,"eparsl;":1021,"eplus;":1022,"epsi;":1023,"epsilon;":1024,"epsiv;":1025,"eqcirc;":1026,"eqcolon;":1027,"eqsim;":1028,"eqslantgtr;":1029,"eqslantless;":1030,"equals;":1031,"equest;":1032,"equiv;":1033,"equivDD;":1034,"eqvparsl;":1035,"erDot;":1036,"erarr;":1037,"escr;":1038,"esdot;":1039,"esim;":1040,"eta;":1041,eth:1042,"eth;":1043,euml:1044,"euml;":1045,"euro;":1046,"excl;":1047,"exist;":1048,"expectation;":1049,"exponentiale;":1050,"fallingdotseq;":1051,"fcy;":1052,"female;":1053,"ffilig;":1054,"fflig;":1055,"ffllig;":1056,"ffr;":1057,"filig;":1058,"fjlig;":1059,"flat;":1060,"fllig;":1061,"fltns;":1062,"fnof;":1063,"fopf;":1064,"forall;":1065,"fork;":1066,"forkv;":1067,"fpartint;":1068,frac12:1069,"frac12;":1070,"frac13;":1071,frac14:1072,"frac14;":1073,"frac15;":1074,"frac16;":1075,"frac18;":1076,"frac23;":1077,"frac25;":1078,frac34:1079,"frac34;":1080,"frac35;":1081,"frac38;":1082,"frac45;":1083,"frac56;":1084,"frac58;":1085,"frac78;":1086,"frasl;":1087,"frown;":1088,"fscr;":1089,"gE;":1090,"gEl;":1091,"gacute;":1092,"gamma;":1093,"gammad;":1094,"gap;":1095,"gbreve;":1096,"gcirc;":1097,"gcy;":1098,"gdot;":1099,"ge;":1100,"gel;":1101,"geq;":1102,"geqq;":1103,"geqslant;":1104,"ges;":1105,"gescc;":1106,"gesdot;":1107,"gesdoto;":1108,"gesdotol;":1109,"gesl;":1110,"gesles;":1111,"gfr;":1112,"gg;":1113,"ggg;":1114,"gimel;":1115,"gjcy;":1116,"gl;":1117,"glE;":1118,"gla;":1119,"glj;":1120,"gnE;":1121,"gnap;":1122,"gnapprox;":1123,"gne;":1124,"gneq;":1125,"gneqq;":1126,"gnsim;":1127,"gopf;":1128,"grave;":1129,"gscr;":1130,"gsim;":1131,"gsime;":1132,"gsiml;":1133,gt:1134,"gt;":1135,"gtcc;":1136,"gtcir;":1137,"gtdot;":1138,"gtlPar;":1139,"gtquest;":1140,"gtrapprox;":1141,"gtrarr;":1142,"gtrdot;":1143,"gtreqless;":1144,"gtreqqless;":1145,"gtrless;":1146,"gtrsim;":1147,"gvertneqq;":1148,"gvnE;":1149,"hArr;":1150,"hairsp;":1151,"half;":1152,"hamilt;":1153,"hardcy;":1154,"harr;":1155,"harrcir;":1156,"harrw;":1157,"hbar;":1158,"hcirc;":1159,"hearts;":1160,"heartsuit;":1161,"hellip;":1162,"hercon;":1163,"hfr;":1164,"hksearow;":1165,"hkswarow;":1166,"hoarr;":1167,"homtht;":1168,"hookleftarrow;":1169,"hookrightarrow;":1170,"hopf;":1171,"horbar;":1172,"hscr;":1173,"hslash;":1174,"hstrok;":1175,"hybull;":1176,"hyphen;":1177,iacute:1178,"iacute;":1179,"ic;":1180,icirc:1181,"icirc;":1182,"icy;":1183,"iecy;":1184,iexcl:1185,"iexcl;":1186,"iff;":1187,"ifr;":1188,igrave:1189,"igrave;":1190,"ii;":1191,"iiiint;":1192,"iiint;":1193,"iinfin;":1194,"iiota;":1195,"ijlig;":1196,"imacr;":1197,"image;":1198,"imagline;":1199,"imagpart;":1200,"imath;":1201,"imof;":1202,"imped;":1203,"in;":1204,"incare;":1205,"infin;":1206,"infintie;":1207,"inodot;":1208,"int;":1209,"intcal;":1210,"integers;":1211,"intercal;":1212,"intlarhk;":1213,"intprod;":1214,"iocy;":1215,"iogon;":1216,"iopf;":1217,"iota;":1218,"iprod;":1219,iquest:1220,"iquest;":1221,"iscr;":1222,"isin;":1223,"isinE;":1224,"isindot;":1225,"isins;":1226,"isinsv;":1227,"isinv;":1228,"it;":1229,"itilde;":1230,"iukcy;":1231,iuml:1232,"iuml;":1233,"jcirc;":1234,"jcy;":1235,"jfr;":1236,"jmath;":1237,"jopf;":1238,"jscr;":1239,"jsercy;":1240,"jukcy;":1241,"kappa;":1242,"kappav;":1243,"kcedil;":1244,"kcy;":1245,"kfr;":1246,"kgreen;":1247,"khcy;":1248,"kjcy;":1249,"kopf;":1250,"kscr;":1251,"lAarr;":1252,"lArr;":1253,"lAtail;":1254,"lBarr;":1255,"lE;":1256,"lEg;":1257,"lHar;":1258,"lacute;":1259,"laemptyv;":1260,"lagran;":1261,"lambda;":1262,"lang;":1263,"langd;":1264,"langle;":1265,"lap;":1266,laquo:1267,"laquo;":1268,"larr;":1269,"larrb;":1270,"larrbfs;":1271,"larrfs;":1272,"larrhk;":1273,"larrlp;":1274,"larrpl;":1275,"larrsim;":1276,"larrtl;":1277,"lat;":1278,"latail;":1279,"late;":1280,"lates;":1281,"lbarr;":1282,"lbbrk;":1283,"lbrace;":1284,"lbrack;":1285,"lbrke;":1286,"lbrksld;":1287,"lbrkslu;":1288,"lcaron;":1289,"lcedil;":1290,"lceil;":1291,"lcub;":1292,"lcy;":1293,"ldca;":1294,"ldquo;":1295,"ldquor;":1296,"ldrdhar;":1297,"ldrushar;":1298,"ldsh;":1299,"le;":1300,"leftarrow;":1301,"leftarrowtail;":1302,"leftharpoondown;":1303,"leftharpoonup;":1304,"leftleftarrows;":1305,"leftrightarrow;":1306,"leftrightarrows;":1307,"leftrightharpoons;":1308,"leftrightsquigarrow;":1309,"leftthreetimes;":1310,"leg;":1311,"leq;":1312,"leqq;":1313,"leqslant;":1314,"les;":1315,"lescc;":1316,"lesdot;":1317,"lesdoto;":1318,"lesdotor;":1319,"lesg;":1320,"lesges;":1321,"lessapprox;":1322,"lessdot;":1323,"lesseqgtr;":1324,"lesseqqgtr;":1325,"lessgtr;":1326,"lesssim;":1327,"lfisht;":1328,"lfloor;":1329,"lfr;":1330,"lg;":1331,"lgE;":1332,"lhard;":1333,"lharu;":1334,"lharul;":1335,"lhblk;":1336,"ljcy;":1337,"ll;":1338,"llarr;":1339,"llcorner;":1340,"llhard;":1341,"lltri;":1342,"lmidot;":1343,"lmoust;":1344,"lmoustache;":1345,"lnE;":1346,"lnap;":1347,"lnapprox;":1348,"lne;":1349,"lneq;":1350,"lneqq;":1351,"lnsim;":1352,"loang;":1353,"loarr;":1354,"lobrk;":1355,"longleftarrow;":1356,"longleftrightarrow;":1357,"longmapsto;":1358,"longrightarrow;":1359,"looparrowleft;":1360,"looparrowright;":1361,"lopar;":1362,"lopf;":1363,"loplus;":1364,"lotimes;":1365,"lowast;":1366,"lowbar;":1367,"loz;":1368,"lozenge;":1369,"lozf;":1370,"lpar;":1371,"lparlt;":1372,"lrarr;":1373,"lrcorner;":1374,"lrhar;":1375,"lrhard;":1376,"lrm;":1377,"lrtri;":1378,"lsaquo;":1379,"lscr;":1380,"lsh;":1381,"lsim;":1382,"lsime;":1383,"lsimg;":1384,"lsqb;":1385,"lsquo;":1386,"lsquor;":1387,"lstrok;":1388,lt:1389,"lt;":1390,"ltcc;":1391,"ltcir;":1392,"ltdot;":1393,"lthree;":1394,"ltimes;":1395,"ltlarr;":1396,"ltquest;":1397,"ltrPar;":1398,"ltri;":1399,"ltrie;":1400,"ltrif;":1401,"lurdshar;":1402,"luruhar;":1403,"lvertneqq;":1404,"lvnE;":1405,"mDDot;":1406,macr:1407,"macr;":1408,"male;":1409,"malt;":1410,"maltese;":1411,"map;":1412,"mapsto;":1413,"mapstodown;":1414,"mapstoleft;":1415,"mapstoup;":1416,"marker;":1417,"mcomma;":1418,"mcy;":1419,"mdash;":1420,"measuredangle;":1421,"mfr;":1422,"mho;":1423,micro:1424,"micro;":1425,"mid;":1426,"midast;":1427,"midcir;":1428,middot:1429,"middot;":1430,"minus;":1431,"minusb;":1432,"minusd;":1433,"minusdu;":1434,"mlcp;":1435,"mldr;":1436,"mnplus;":1437,"models;":1438,"mopf;":1439,"mp;":1440,"mscr;":1441,"mstpos;":1442,"mu;":1443,"multimap;":1444,"mumap;":1445,"nGg;":1446,"nGt;":1447,"nGtv;":1448,"nLeftarrow;":1449,"nLeftrightarrow;":1450,"nLl;":1451,"nLt;":1452,"nLtv;":1453,"nRightarrow;":1454,"nVDash;":1455,"nVdash;":1456,"nabla;":1457,"nacute;":1458,"nang;":1459,"nap;":1460,"napE;":1461,"napid;":1462,"napos;":1463,"napprox;":1464,"natur;":1465,"natural;":1466,"naturals;":1467,nbsp:1468,"nbsp;":1469,"nbump;":1470,"nbumpe;":1471,"ncap;":1472,"ncaron;":1473,"ncedil;":1474,"ncong;":1475,"ncongdot;":1476,"ncup;":1477,"ncy;":1478,"ndash;":1479,"ne;":1480,"neArr;":1481,"nearhk;":1482,"nearr;":1483,"nearrow;":1484,"nedot;":1485,"nequiv;":1486,"nesear;":1487,"nesim;":1488,"nexist;":1489,"nexists;":1490,"nfr;":1491,"ngE;":1492,"nge;":1493,"ngeq;":1494,"ngeqq;":1495,"ngeqslant;":1496,"nges;":1497,"ngsim;":1498,"ngt;":1499,"ngtr;":1500,"nhArr;":1501,"nharr;":1502,"nhpar;":1503,"ni;":1504,"nis;":1505,"nisd;":1506,"niv;":1507,"njcy;":1508,"nlArr;":1509,"nlE;":1510,"nlarr;":1511,"nldr;":1512,"nle;":1513,"nleftarrow;":1514,"nleftrightarrow;":1515,"nleq;":1516,"nleqq;":1517,"nleqslant;":1518,"nles;":1519,"nless;":1520,"nlsim;":1521,"nlt;":1522,"nltri;":1523,"nltrie;":1524,"nmid;":1525,"nopf;":1526,not:1527,"not;":1528,"notin;":1529,"notinE;":1530,"notindot;":1531,"notinva;":1532,"notinvb;":1533,"notinvc;":1534,"notni;":1535,"notniva;":1536,"notnivb;":1537,"notnivc;":1538,"npar;":1539,"nparallel;":1540,"nparsl;":1541,"npart;":1542,"npolint;":1543,"npr;":1544,"nprcue;":1545,"npre;":1546,"nprec;":1547,"npreceq;":1548,"nrArr;":1549,"nrarr;":1550,"nrarrc;":1551,"nrarrw;":1552,"nrightarrow;":1553,"nrtri;":1554,"nrtrie;":1555,"nsc;":1556,"nsccue;":1557,"nsce;":1558,"nscr;":1559,"nshortmid;":1560,"nshortparallel;":1561,"nsim;":1562,"nsime;":1563,"nsimeq;":1564,"nsmid;":1565,"nspar;":1566,"nsqsube;":1567,"nsqsupe;":1568,"nsub;":1569,"nsubE;":1570,"nsube;":1571,"nsubset;":1572,"nsubseteq;":1573,"nsubseteqq;":1574,"nsucc;":1575,"nsucceq;":1576,"nsup;":1577,"nsupE;":1578,"nsupe;":1579,"nsupset;":1580,"nsupseteq;":1581,"nsupseteqq;":1582,"ntgl;":1583,ntilde:1584,"ntilde;":1585,"ntlg;":1586,"ntriangleleft;":1587,"ntrianglelefteq;":1588,"ntriangleright;":1589,"ntrianglerighteq;":1590,"nu;":1591,"num;":1592,"numero;":1593,"numsp;":1594,"nvDash;":1595,"nvHarr;":1596,"nvap;":1597,"nvdash;":1598,"nvge;":1599,"nvgt;":1600,"nvinfin;":1601,"nvlArr;":1602,"nvle;":1603,"nvlt;":1604,"nvltrie;":1605,"nvrArr;":1606,"nvrtrie;":1607,"nvsim;":1608,"nwArr;":1609,"nwarhk;":1610,"nwarr;":1611,"nwarrow;":1612,"nwnear;":1613,"oS;":1614,oacute:1615,"oacute;":1616,"oast;":1617,"ocir;":1618,ocirc:1619,"ocirc;":1620,"ocy;":1621,"odash;":1622,"odblac;":1623,"odiv;":1624,"odot;":1625,"odsold;":1626,"oelig;":1627,"ofcir;":1628,"ofr;":1629,"ogon;":1630,ograve:1631,"ograve;":1632,"ogt;":1633,"ohbar;":1634,"ohm;":1635,"oint;":1636,"olarr;":1637,"olcir;":1638,"olcross;":1639,"oline;":1640,"olt;":1641,"omacr;":1642,"omega;":1643,"omicron;":1644,"omid;":1645,"ominus;":1646,"oopf;":1647,"opar;":1648,"operp;":1649,"oplus;":1650,"or;":1651,"orarr;":1652,"ord;":1653,"order;":1654,"orderof;":1655,ordf:1656,"ordf;":1657,ordm:1658,"ordm;":1659,"origof;":1660,"oror;":1661,"orslope;":1662,"orv;":1663,"oscr;":1664,oslash:1665,"oslash;":1666,"osol;":1667,otilde:1668,"otilde;":1669,"otimes;":1670,"otimesas;":1671,ouml:1672,"ouml;":1673,"ovbar;":1674,"par;":1675,para:1676,"para;":1677,"parallel;":1678,"parsim;":1679,"parsl;":1680,"part;":1681,"pcy;":1682,"percnt;":1683,"period;":1684,"permil;":1685,"perp;":1686,"pertenk;":1687,"pfr;":1688,"phi;":1689,"phiv;":1690,"phmmat;":1691,"phone;":1692,"pi;":1693,"pitchfork;":1694,"piv;":1695,"planck;":1696,"planckh;":1697,"plankv;":1698,"plus;":1699,"plusacir;":1700,"plusb;":1701,"pluscir;":1702,"plusdo;":1703,"plusdu;":1704,"pluse;":1705,plusmn:1706,"plusmn;":1707,"plussim;":1708,"plustwo;":1709,"pm;":1710,"pointint;":1711,"popf;":1712,pound:1713,"pound;":1714,"pr;":1715,"prE;":1716,"prap;":1717,"prcue;":1718,"pre;":1719,"prec;":1720,"precapprox;":1721,"preccurlyeq;":1722,"preceq;":1723,"precnapprox;":1724,"precneqq;":1725,"precnsim;":1726,"precsim;":1727,"prime;":1728,"primes;":1729,"prnE;":1730,"prnap;":1731,"prnsim;":1732,"prod;":1733,"profalar;":1734,"profline;":1735,"profsurf;":1736,"prop;":1737,"propto;":1738,"prsim;":1739,"prurel;":1740,"pscr;":1741,"psi;":1742,"puncsp;":1743,"qfr;":1744,"qint;":1745,"qopf;":1746,"qprime;":1747,"qscr;":1748,"quaternions;":1749,"quatint;":1750,"quest;":1751,"questeq;":1752,quot:1753,"quot;":1754,"rAarr;":1755,"rArr;":1756,"rAtail;":1757,"rBarr;":1758,"rHar;":1759,"race;":1760,"racute;":1761,"radic;":1762,"raemptyv;":1763,"rang;":1764,"rangd;":1765,"range;":1766,"rangle;":1767,raquo:1768,"raquo;":1769,"rarr;":1770,"rarrap;":1771,"rarrb;":1772,"rarrbfs;":1773,"rarrc;":1774,"rarrfs;":1775,"rarrhk;":1776,"rarrlp;":1777,"rarrpl;":1778,"rarrsim;":1779,"rarrtl;":1780,"rarrw;":1781,"ratail;":1782,"ratio;":1783,"rationals;":1784,"rbarr;":1785,"rbbrk;":1786,"rbrace;":1787,"rbrack;":1788,"rbrke;":1789,"rbrksld;":1790,"rbrkslu;":1791,"rcaron;":1792,"rcedil;":1793,"rceil;":1794,"rcub;":1795,"rcy;":1796,"rdca;":1797,"rdldhar;":1798,"rdquo;":1799,"rdquor;":1800,"rdsh;":1801,"real;":1802,"realine;":1803,"realpart;":1804,"reals;":1805,"rect;":1806,reg:1807,"reg;":1808,"rfisht;":1809,"rfloor;":1810,"rfr;":1811,"rhard;":1812,"rharu;":1813,"rharul;":1814,"rho;":1815,"rhov;":1816,"rightarrow;":1817,"rightarrowtail;":1818,"rightharpoondown;":1819,"rightharpoonup;":1820,"rightleftarrows;":1821,"rightleftharpoons;":1822,"rightrightarrows;":1823,"rightsquigarrow;":1824,"rightthreetimes;":1825,"ring;":1826,"risingdotseq;":1827,"rlarr;":1828,"rlhar;":1829,"rlm;":1830,"rmoust;":1831,"rmoustache;":1832,"rnmid;":1833,"roang;":1834,"roarr;":1835,"robrk;":1836,"ropar;":1837,"ropf;":1838,"roplus;":1839,"rotimes;":1840,"rpar;":1841,"rpargt;":1842,"rppolint;":1843,"rrarr;":1844,"rsaquo;":1845,"rscr;":1846,"rsh;":1847,"rsqb;":1848,"rsquo;":1849,"rsquor;":1850,"rthree;":1851,"rtimes;":1852,"rtri;":1853,"rtrie;":1854,"rtrif;":1855,"rtriltri;":1856,"ruluhar;":1857,"rx;":1858,"sacute;":1859,"sbquo;":1860,"sc;":1861,"scE;":1862,"scap;":1863,"scaron;":1864,"sccue;":1865,"sce;":1866,"scedil;":1867,"scirc;":1868,"scnE;":1869,"scnap;":1870,"scnsim;":1871,"scpolint;":1872,"scsim;":1873,"scy;":1874,"sdot;":1875,"sdotb;":1876,"sdote;":1877,"seArr;":1878,"searhk;":1879,"searr;":1880,"searrow;":1881,sect:1882,"sect;":1883,"semi;":1884,"seswar;":1885,"setminus;":1886,"setmn;":1887,"sext;":1888,"sfr;":1889,"sfrown;":1890,"sharp;":1891,"shchcy;":1892,"shcy;":1893,"shortmid;":1894,"shortparallel;":1895,shy:1896,"shy;":1897,"sigma;":1898,"sigmaf;":1899,"sigmav;":1900,"sim;":1901,"simdot;":1902,"sime;":1903,"simeq;":1904,"simg;":1905,"simgE;":1906,"siml;":1907,"simlE;":1908,"simne;":1909,"simplus;":1910,"simrarr;":1911,"slarr;":1912,"smallsetminus;":1913,"smashp;":1914,"smeparsl;":1915,"smid;":1916,"smile;":1917,"smt;":1918,"smte;":1919,"smtes;":1920,"softcy;":1921,"sol;":1922,"solb;":1923,"solbar;":1924,"sopf;":1925,"spades;":1926,"spadesuit;":1927,"spar;":1928,"sqcap;":1929,"sqcaps;":1930,"sqcup;":1931,"sqcups;":1932,"sqsub;":1933,"sqsube;":1934,"sqsubset;":1935,"sqsubseteq;":1936,"sqsup;":1937,"sqsupe;":1938,"sqsupset;":1939,"sqsupseteq;":1940,"squ;":1941,"square;":1942,"squarf;":1943,"squf;":1944,"srarr;":1945,"sscr;":1946,"ssetmn;":1947,"ssmile;":1948,"sstarf;":1949,"star;":1950,"starf;":1951,"straightepsilon;":1952,"straightphi;":1953,"strns;":1954,"sub;":1955,"subE;":1956,"subdot;":1957,"sube;":1958,"subedot;":1959,"submult;":1960,"subnE;":1961,"subne;":1962,"subplus;":1963,"subrarr;":1964,"subset;":1965,"subseteq;":1966,"subseteqq;":1967,"subsetneq;":1968,"subsetneqq;":1969,"subsim;":1970,"subsub;":1971,"subsup;":1972,"succ;":1973,"succapprox;":1974,"succcurlyeq;":1975,"succeq;":1976,"succnapprox;":1977,"succneqq;":1978,"succnsim;":1979,"succsim;":1980,"sum;":1981,"sung;":1982,sup1:1983,"sup1;":1984,sup2:1985,"sup2;":1986,sup3:1987,"sup3;":1988,"sup;":1989,"supE;":1990,"supdot;":1991,"supdsub;":1992,"supe;":1993,"supedot;":1994,"suphsol;":1995,"suphsub;":1996,"suplarr;":1997,"supmult;":1998,"supnE;":1999,"supne;":2000,"supplus;":2001,"supset;":2002,"supseteq;":2003,"supseteqq;":2004,"supsetneq;":2005,"supsetneqq;":2006,"supsim;":2007,"supsub;":2008,"supsup;":2009,"swArr;":2010,"swarhk;":2011,"swarr;":2012,"swarrow;":2013,"swnwar;":2014,szlig:2015,"szlig;":2016,"target;":2017,"tau;":2018,"tbrk;":2019,"tcaron;":2020,"tcedil;":2021,"tcy;":2022,"tdot;":2023,"telrec;":2024,"tfr;":2025,"there4;":2026,"therefore;":2027,"theta;":2028,"thetasym;":2029,"thetav;":2030,"thickapprox;":2031,"thicksim;":2032,"thinsp;":2033,"thkap;":2034,"thksim;":2035,thorn:2036,"thorn;":2037,"tilde;":2038,times:2039,"times;":2040,"timesb;":2041,"timesbar;":2042,"timesd;":2043,"tint;":2044,"toea;":2045,"top;":2046,"topbot;":2047,"topcir;":2048,"topf;":2049,"topfork;":2050,"tosa;":2051,"tprime;":2052,"trade;":2053,"triangle;":2054,"triangledown;":2055,"triangleleft;":2056,"trianglelefteq;":2057,"triangleq;":2058,"triangleright;":2059,"trianglerighteq;":2060,"tridot;":2061,"trie;":2062,"triminus;":2063,"triplus;":2064,"trisb;":2065,"tritime;":2066,"trpezium;":2067,"tscr;":2068,"tscy;":2069,"tshcy;":2070,"tstrok;":2071,"twixt;":2072,"twoheadleftarrow;":2073,"twoheadrightarrow;":2074,"uArr;":2075,"uHar;":2076,uacute:2077,"uacute;":2078,"uarr;":2079,"ubrcy;":2080,"ubreve;":2081,ucirc:2082,"ucirc;":2083,"ucy;":2084,"udarr;":2085,"udblac;":2086,"udhar;":2087,"ufisht;":2088,"ufr;":2089,ugrave:2090,"ugrave;":2091,"uharl;":2092,"uharr;":2093,"uhblk;":2094,"ulcorn;":2095,"ulcorner;":2096,"ulcrop;":2097,"ultri;":2098,"umacr;":2099,uml:2100,"uml;":2101,"uogon;":2102,"uopf;":2103,"uparrow;":2104,"updownarrow;":2105,"upharpoonleft;":2106,"upharpoonright;":2107,"uplus;":2108,"upsi;":2109,"upsih;":2110,"upsilon;":2111,"upuparrows;":2112,"urcorn;":2113,"urcorner;":2114,"urcrop;":2115,"uring;":2116,"urtri;":2117,"uscr;":2118,"utdot;":2119,"utilde;":2120,"utri;":2121,"utrif;":2122,"uuarr;":2123,uuml:2124,"uuml;":2125,"uwangle;":2126,"vArr;":2127,"vBar;":2128,"vBarv;":2129,"vDash;":2130,"vangrt;":2131,"varepsilon;":2132,"varkappa;":2133,"varnothing;":2134,"varphi;":2135,"varpi;":2136,"varpropto;":2137,"varr;":2138,"varrho;":2139,"varsigma;":2140,"varsubsetneq;":2141,"varsubsetneqq;":2142,"varsupsetneq;":2143,"varsupsetneqq;":2144,"vartheta;":2145,"vartriangleleft;":2146,"vartriangleright;":2147,"vcy;":2148,"vdash;":2149,"vee;":2150,"veebar;":2151,"veeeq;":2152,"vellip;":2153,"verbar;":2154,"vert;":2155,"vfr;":2156,"vltri;":2157,"vnsub;":2158,"vnsup;":2159,"vopf;":2160,"vprop;":2161,"vrtri;":2162,"vscr;":2163,"vsubnE;":2164,"vsubne;":2165,"vsupnE;":2166,"vsupne;":2167,"vzigzag;":2168,"wcirc;":2169,"wedbar;":2170,"wedge;":2171,"wedgeq;":2172,"weierp;":2173,"wfr;":2174,"wopf;":2175,"wp;":2176,"wr;":2177,"wreath;":2178,"wscr;":2179,"xcap;":2180,"xcirc;":2181,"xcup;":2182,"xdtri;":2183,"xfr;":2184,"xhArr;":2185,"xharr;":2186,"xi;":2187,"xlArr;":2188,"xlarr;":2189,"xmap;":2190,"xnis;":2191,"xodot;":2192,"xopf;":2193,"xoplus;":2194,"xotime;":2195,"xrArr;":2196,"xrarr;":2197,"xscr;":2198,"xsqcup;":2199,"xuplus;":2200,"xutri;":2201,"xvee;":2202,"xwedge;":2203,yacute:2204,"yacute;":2205,"yacy;":2206,"ycirc;":2207,"ycy;":2208,yen:2209,"yen;":2210,"yfr;":2211,"yicy;":2212,"yopf;":2213,"yscr;":2214,"yucy;":2215,yuml:2216,"yuml;":2217,"zacute;":2218,"zcaron;":2219,"zcy;":2220,"zdot;":2221,"zeetrf;":2222,"zeta;":2223,"zfr;":2224,"zhcy;":2225,"zigrarr;":2226,"zopf;":2227,"zscr;":2228,"zwj;":2229,"zwnj;":2230} +B.fs=new A.r(B.KW,["\xc6","\xc6","&","&","\xc1","\xc1","\u0102","\xc2","\xc2","\u0410","\ud835\udd04","\xc0","\xc0","\u0391","\u0100","\u2a53","\u0104","\ud835\udd38","\u2061","\xc5","\xc5","\ud835\udc9c","\u2254","\xc3","\xc3","\xc4","\xc4","\u2216","\u2ae7","\u2306","\u0411","\u2235","\u212c","\u0392","\ud835\udd05","\ud835\udd39","\u02d8","\u212c","\u224e","\u0427","\xa9","\xa9","\u0106","\u22d2","\u2145","\u212d","\u010c","\xc7","\xc7","\u0108","\u2230","\u010a","\xb8","\xb7","\u212d","\u03a7","\u2299","\u2296","\u2295","\u2297","\u2232","\u201d","\u2019","\u2237","\u2a74","\u2261","\u222f","\u222e","\u2102","\u2210","\u2233","\u2a2f","\ud835\udc9e","\u22d3","\u224d","\u2145","\u2911","\u0402","\u0405","\u040f","\u2021","\u21a1","\u2ae4","\u010e","\u0414","\u2207","\u0394","\ud835\udd07","\xb4","\u02d9","\u02dd","`","\u02dc","\u22c4","\u2146","\ud835\udd3b","\xa8","\u20dc","\u2250","\u222f","\xa8","\u21d3","\u21d0","\u21d4","\u2ae4","\u27f8","\u27fa","\u27f9","\u21d2","\u22a8","\u21d1","\u21d5","\u2225","\u2193","\u2913","\u21f5","\u0311","\u2950","\u295e","\u21bd","\u2956","\u295f","\u21c1","\u2957","\u22a4","\u21a7","\u21d3","\ud835\udc9f","\u0110","\u014a","\xd0","\xd0","\xc9","\xc9","\u011a","\xca","\xca","\u042d","\u0116","\ud835\udd08","\xc8","\xc8","\u2208","\u0112","\u25fb","\u25ab","\u0118","\ud835\udd3c","\u0395","\u2a75","\u2242","\u21cc","\u2130","\u2a73","\u0397","\xcb","\xcb","\u2203","\u2147","\u0424","\ud835\udd09","\u25fc","\u25aa","\ud835\udd3d","\u2200","\u2131","\u2131","\u0403",">",">","\u0393","\u03dc","\u011e","\u0122","\u011c","\u0413","\u0120","\ud835\udd0a","\u22d9","\ud835\udd3e","\u2265","\u22db","\u2267","\u2aa2","\u2277","\u2a7e","\u2273","\ud835\udca2","\u226b","\u042a","\u02c7","^","\u0124","\u210c","\u210b","\u210d","\u2500","\u210b","\u0126","\u224e","\u224f","\u0415","\u0132","\u0401","\xcd","\xcd","\xce","\xce","\u0418","\u0130","\u2111","\xcc","\xcc","\u2111","\u012a","\u2148","\u21d2","\u222c","\u222b","\u22c2","\u2063","\u2062","\u012e","\ud835\udd40","\u0399","\u2110","\u0128","\u0406","\xcf","\xcf","\u0134","\u0419","\ud835\udd0d","\ud835\udd41","\ud835\udca5","\u0408","\u0404","\u0425","\u040c","\u039a","\u0136","\u041a","\ud835\udd0e","\ud835\udd42","\ud835\udca6","\u0409","<","<","\u0139","\u039b","\u27ea","\u2112","\u219e","\u013d","\u013b","\u041b","\u27e8","\u2190","\u21e4","\u21c6","\u2308","\u27e6","\u2961","\u21c3","\u2959","\u230a","\u2194","\u294e","\u22a3","\u21a4","\u295a","\u22b2","\u29cf","\u22b4","\u2951","\u2960","\u21bf","\u2958","\u21bc","\u2952","\u21d0","\u21d4","\u22da","\u2266","\u2276","\u2aa1","\u2a7d","\u2272","\ud835\udd0f","\u22d8","\u21da","\u013f","\u27f5","\u27f7","\u27f6","\u27f8","\u27fa","\u27f9","\ud835\udd43","\u2199","\u2198","\u2112","\u21b0","\u0141","\u226a","\u2905","\u041c","\u205f","\u2133","\ud835\udd10","\u2213","\ud835\udd44","\u2133","\u039c","\u040a","\u0143","\u0147","\u0145","\u041d","\u200b","\u200b","\u200b","\u200b","\u226b","\u226a","\n","\ud835\udd11","\u2060","\xa0","\u2115","\u2aec","\u2262","\u226d","\u2226","\u2209","\u2260","\u2242\u0338","\u2204","\u226f","\u2271","\u2267\u0338","\u226b\u0338","\u2279","\u2a7e\u0338","\u2275","\u224e\u0338","\u224f\u0338","\u22ea","\u29cf\u0338","\u22ec","\u226e","\u2270","\u2278","\u226a\u0338","\u2a7d\u0338","\u2274","\u2aa2\u0338","\u2aa1\u0338","\u2280","\u2aaf\u0338","\u22e0","\u220c","\u22eb","\u29d0\u0338","\u22ed","\u228f\u0338","\u22e2","\u2290\u0338","\u22e3","\u2282\u20d2","\u2288","\u2281","\u2ab0\u0338","\u22e1","\u227f\u0338","\u2283\u20d2","\u2289","\u2241","\u2244","\u2247","\u2249","\u2224","\ud835\udca9","\xd1","\xd1","\u039d","\u0152","\xd3","\xd3","\xd4","\xd4","\u041e","\u0150","\ud835\udd12","\xd2","\xd2","\u014c","\u03a9","\u039f","\ud835\udd46","\u201c","\u2018","\u2a54","\ud835\udcaa","\xd8","\xd8","\xd5","\xd5","\u2a37","\xd6","\xd6","\u203e","\u23de","\u23b4","\u23dc","\u2202","\u041f","\ud835\udd13","\u03a6","\u03a0","\xb1","\u210c","\u2119","\u2abb","\u227a","\u2aaf","\u227c","\u227e","\u2033","\u220f","\u2237","\u221d","\ud835\udcab","\u03a8",'"','"',"\ud835\udd14","\u211a","\ud835\udcac","\u2910","\xae","\xae","\u0154","\u27eb","\u21a0","\u2916","\u0158","\u0156","\u0420","\u211c","\u220b","\u21cb","\u296f","\u211c","\u03a1","\u27e9","\u2192","\u21e5","\u21c4","\u2309","\u27e7","\u295d","\u21c2","\u2955","\u230b","\u22a2","\u21a6","\u295b","\u22b3","\u29d0","\u22b5","\u294f","\u295c","\u21be","\u2954","\u21c0","\u2953","\u21d2","\u211d","\u2970","\u21db","\u211b","\u21b1","\u29f4","\u0429","\u0428","\u042c","\u015a","\u2abc","\u0160","\u015e","\u015c","\u0421","\ud835\udd16","\u2193","\u2190","\u2192","\u2191","\u03a3","\u2218","\ud835\udd4a","\u221a","\u25a1","\u2293","\u228f","\u2291","\u2290","\u2292","\u2294","\ud835\udcae","\u22c6","\u22d0","\u22d0","\u2286","\u227b","\u2ab0","\u227d","\u227f","\u220b","\u2211","\u22d1","\u2283","\u2287","\u22d1","\xde","\xde","\u2122","\u040b","\u0426","\t","\u03a4","\u0164","\u0162","\u0422","\ud835\udd17","\u2234","\u0398","\u205f\u200a","\u2009","\u223c","\u2243","\u2245","\u2248","\ud835\udd4b","\u20db","\ud835\udcaf","\u0166","\xda","\xda","\u219f","\u2949","\u040e","\u016c","\xdb","\xdb","\u0423","\u0170","\ud835\udd18","\xd9","\xd9","\u016a","_","\u23df","\u23b5","\u23dd","\u22c3","\u228e","\u0172","\ud835\udd4c","\u2191","\u2912","\u21c5","\u2195","\u296e","\u22a5","\u21a5","\u21d1","\u21d5","\u2196","\u2197","\u03d2","\u03a5","\u016e","\ud835\udcb0","\u0168","\xdc","\xdc","\u22ab","\u2aeb","\u0412","\u22a9","\u2ae6","\u22c1","\u2016","\u2016","\u2223","|","\u2758","\u2240","\u200a","\ud835\udd19","\ud835\udd4d","\ud835\udcb1","\u22aa","\u0174","\u22c0","\ud835\udd1a","\ud835\udd4e","\ud835\udcb2","\ud835\udd1b","\u039e","\ud835\udd4f","\ud835\udcb3","\u042f","\u0407","\u042e","\xdd","\xdd","\u0176","\u042b","\ud835\udd1c","\ud835\udd50","\ud835\udcb4","\u0178","\u0416","\u0179","\u017d","\u0417","\u017b","\u200b","\u0396","\u2128","\u2124","\ud835\udcb5","\xe1","\xe1","\u0103","\u223e","\u223e\u0333","\u223f","\xe2","\xe2","\xb4","\xb4","\u0430","\xe6","\xe6","\u2061","\ud835\udd1e","\xe0","\xe0","\u2135","\u2135","\u03b1","\u0101","\u2a3f","&","&","\u2227","\u2a55","\u2a5c","\u2a58","\u2a5a","\u2220","\u29a4","\u2220","\u2221","\u29a8","\u29a9","\u29aa","\u29ab","\u29ac","\u29ad","\u29ae","\u29af","\u221f","\u22be","\u299d","\u2222","\xc5","\u237c","\u0105","\ud835\udd52","\u2248","\u2a70","\u2a6f","\u224a","\u224b","'","\u2248","\u224a","\xe5","\xe5","\ud835\udcb6","*","\u2248","\u224d","\xe3","\xe3","\xe4","\xe4","\u2233","\u2a11","\u2aed","\u224c","\u03f6","\u2035","\u223d","\u22cd","\u22bd","\u2305","\u2305","\u23b5","\u23b6","\u224c","\u0431","\u201e","\u2235","\u2235","\u29b0","\u03f6","\u212c","\u03b2","\u2136","\u226c","\ud835\udd1f","\u22c2","\u25ef","\u22c3","\u2a00","\u2a01","\u2a02","\u2a06","\u2605","\u25bd","\u25b3","\u2a04","\u22c1","\u22c0","\u290d","\u29eb","\u25aa","\u25b4","\u25be","\u25c2","\u25b8","\u2423","\u2592","\u2591","\u2593","\u2588","=\u20e5","\u2261\u20e5","\u2310","\ud835\udd53","\u22a5","\u22a5","\u22c8","\u2557","\u2554","\u2556","\u2553","\u2550","\u2566","\u2569","\u2564","\u2567","\u255d","\u255a","\u255c","\u2559","\u2551","\u256c","\u2563","\u2560","\u256b","\u2562","\u255f","\u29c9","\u2555","\u2552","\u2510","\u250c","\u2500","\u2565","\u2568","\u252c","\u2534","\u229f","\u229e","\u22a0","\u255b","\u2558","\u2518","\u2514","\u2502","\u256a","\u2561","\u255e","\u253c","\u2524","\u251c","\u2035","\u02d8","\xa6","\xa6","\ud835\udcb7","\u204f","\u223d","\u22cd","\\","\u29c5","\u27c8","\u2022","\u2022","\u224e","\u2aae","\u224f","\u224f","\u0107","\u2229","\u2a44","\u2a49","\u2a4b","\u2a47","\u2a40","\u2229\ufe00","\u2041","\u02c7","\u2a4d","\u010d","\xe7","\xe7","\u0109","\u2a4c","\u2a50","\u010b","\xb8","\xb8","\u29b2","\xa2","\xa2","\xb7","\ud835\udd20","\u0447","\u2713","\u2713","\u03c7","\u25cb","\u29c3","\u02c6","\u2257","\u21ba","\u21bb","\xae","\u24c8","\u229b","\u229a","\u229d","\u2257","\u2a10","\u2aef","\u29c2","\u2663","\u2663",":","\u2254","\u2254",",","@","\u2201","\u2218","\u2201","\u2102","\u2245","\u2a6d","\u222e","\ud835\udd54","\u2210","\xa9","\xa9","\u2117","\u21b5","\u2717","\ud835\udcb8","\u2acf","\u2ad1","\u2ad0","\u2ad2","\u22ef","\u2938","\u2935","\u22de","\u22df","\u21b6","\u293d","\u222a","\u2a48","\u2a46","\u2a4a","\u228d","\u2a45","\u222a\ufe00","\u21b7","\u293c","\u22de","\u22df","\u22ce","\u22cf","\xa4","\xa4","\u21b6","\u21b7","\u22ce","\u22cf","\u2232","\u2231","\u232d","\u21d3","\u2965","\u2020","\u2138","\u2193","\u2010","\u22a3","\u290f","\u02dd","\u010f","\u0434","\u2146","\u2021","\u21ca","\u2a77","\xb0","\xb0","\u03b4","\u29b1","\u297f","\ud835\udd21","\u21c3","\u21c2","\u22c4","\u22c4","\u2666","\u2666","\xa8","\u03dd","\u22f2","\xf7","\xf7","\xf7","\u22c7","\u22c7","\u0452","\u231e","\u230d","$","\ud835\udd55","\u02d9","\u2250","\u2251","\u2238","\u2214","\u22a1","\u2306","\u2193","\u21ca","\u21c3","\u21c2","\u2910","\u231f","\u230c","\ud835\udcb9","\u0455","\u29f6","\u0111","\u22f1","\u25bf","\u25be","\u21f5","\u296f","\u29a6","\u045f","\u27ff","\u2a77","\u2251","\xe9","\xe9","\u2a6e","\u011b","\u2256","\xea","\xea","\u2255","\u044d","\u0117","\u2147","\u2252","\ud835\udd22","\u2a9a","\xe8","\xe8","\u2a96","\u2a98","\u2a99","\u23e7","\u2113","\u2a95","\u2a97","\u0113","\u2205","\u2205","\u2205","\u2004","\u2005","\u2003","\u014b","\u2002","\u0119","\ud835\udd56","\u22d5","\u29e3","\u2a71","\u03b5","\u03b5","\u03f5","\u2256","\u2255","\u2242","\u2a96","\u2a95","=","\u225f","\u2261","\u2a78","\u29e5","\u2253","\u2971","\u212f","\u2250","\u2242","\u03b7","\xf0","\xf0","\xeb","\xeb","\u20ac","!","\u2203","\u2130","\u2147","\u2252","\u0444","\u2640","\ufb03","\ufb00","\ufb04","\ud835\udd23","\ufb01","fj","\u266d","\ufb02","\u25b1","\u0192","\ud835\udd57","\u2200","\u22d4","\u2ad9","\u2a0d","\xbd","\xbd","\u2153","\xbc","\xbc","\u2155","\u2159","\u215b","\u2154","\u2156","\xbe","\xbe","\u2157","\u215c","\u2158","\u215a","\u215d","\u215e","\u2044","\u2322","\ud835\udcbb","\u2267","\u2a8c","\u01f5","\u03b3","\u03dd","\u2a86","\u011f","\u011d","\u0433","\u0121","\u2265","\u22db","\u2265","\u2267","\u2a7e","\u2a7e","\u2aa9","\u2a80","\u2a82","\u2a84","\u22db\ufe00","\u2a94","\ud835\udd24","\u226b","\u22d9","\u2137","\u0453","\u2277","\u2a92","\u2aa5","\u2aa4","\u2269","\u2a8a","\u2a8a","\u2a88","\u2a88","\u2269","\u22e7","\ud835\udd58","`","\u210a","\u2273","\u2a8e","\u2a90",">",">","\u2aa7","\u2a7a","\u22d7","\u2995","\u2a7c","\u2a86","\u2978","\u22d7","\u22db","\u2a8c","\u2277","\u2273","\u2269\ufe00","\u2269\ufe00","\u21d4","\u200a","\xbd","\u210b","\u044a","\u2194","\u2948","\u21ad","\u210f","\u0125","\u2665","\u2665","\u2026","\u22b9","\ud835\udd25","\u2925","\u2926","\u21ff","\u223b","\u21a9","\u21aa","\ud835\udd59","\u2015","\ud835\udcbd","\u210f","\u0127","\u2043","\u2010","\xed","\xed","\u2063","\xee","\xee","\u0438","\u0435","\xa1","\xa1","\u21d4","\ud835\udd26","\xec","\xec","\u2148","\u2a0c","\u222d","\u29dc","\u2129","\u0133","\u012b","\u2111","\u2110","\u2111","\u0131","\u22b7","\u01b5","\u2208","\u2105","\u221e","\u29dd","\u0131","\u222b","\u22ba","\u2124","\u22ba","\u2a17","\u2a3c","\u0451","\u012f","\ud835\udd5a","\u03b9","\u2a3c","\xbf","\xbf","\ud835\udcbe","\u2208","\u22f9","\u22f5","\u22f4","\u22f3","\u2208","\u2062","\u0129","\u0456","\xef","\xef","\u0135","\u0439","\ud835\udd27","\u0237","\ud835\udd5b","\ud835\udcbf","\u0458","\u0454","\u03ba","\u03f0","\u0137","\u043a","\ud835\udd28","\u0138","\u0445","\u045c","\ud835\udd5c","\ud835\udcc0","\u21da","\u21d0","\u291b","\u290e","\u2266","\u2a8b","\u2962","\u013a","\u29b4","\u2112","\u03bb","\u27e8","\u2991","\u27e8","\u2a85","\xab","\xab","\u2190","\u21e4","\u291f","\u291d","\u21a9","\u21ab","\u2939","\u2973","\u21a2","\u2aab","\u2919","\u2aad","\u2aad\ufe00","\u290c","\u2772","{","[","\u298b","\u298f","\u298d","\u013e","\u013c","\u2308","{","\u043b","\u2936","\u201c","\u201e","\u2967","\u294b","\u21b2","\u2264","\u2190","\u21a2","\u21bd","\u21bc","\u21c7","\u2194","\u21c6","\u21cb","\u21ad","\u22cb","\u22da","\u2264","\u2266","\u2a7d","\u2a7d","\u2aa8","\u2a7f","\u2a81","\u2a83","\u22da\ufe00","\u2a93","\u2a85","\u22d6","\u22da","\u2a8b","\u2276","\u2272","\u297c","\u230a","\ud835\udd29","\u2276","\u2a91","\u21bd","\u21bc","\u296a","\u2584","\u0459","\u226a","\u21c7","\u231e","\u296b","\u25fa","\u0140","\u23b0","\u23b0","\u2268","\u2a89","\u2a89","\u2a87","\u2a87","\u2268","\u22e6","\u27ec","\u21fd","\u27e6","\u27f5","\u27f7","\u27fc","\u27f6","\u21ab","\u21ac","\u2985","\ud835\udd5d","\u2a2d","\u2a34","\u2217","_","\u25ca","\u25ca","\u29eb","(","\u2993","\u21c6","\u231f","\u21cb","\u296d","\u200e","\u22bf","\u2039","\ud835\udcc1","\u21b0","\u2272","\u2a8d","\u2a8f","[","\u2018","\u201a","\u0142","<","<","\u2aa6","\u2a79","\u22d6","\u22cb","\u22c9","\u2976","\u2a7b","\u2996","\u25c3","\u22b4","\u25c2","\u294a","\u2966","\u2268\ufe00","\u2268\ufe00","\u223a","\xaf","\xaf","\u2642","\u2720","\u2720","\u21a6","\u21a6","\u21a7","\u21a4","\u21a5","\u25ae","\u2a29","\u043c","\u2014","\u2221","\ud835\udd2a","\u2127","\xb5","\xb5","\u2223","*","\u2af0","\xb7","\xb7","\u2212","\u229f","\u2238","\u2a2a","\u2adb","\u2026","\u2213","\u22a7","\ud835\udd5e","\u2213","\ud835\udcc2","\u223e","\u03bc","\u22b8","\u22b8","\u22d9\u0338","\u226b\u20d2","\u226b\u0338","\u21cd","\u21ce","\u22d8\u0338","\u226a\u20d2","\u226a\u0338","\u21cf","\u22af","\u22ae","\u2207","\u0144","\u2220\u20d2","\u2249","\u2a70\u0338","\u224b\u0338","\u0149","\u2249","\u266e","\u266e","\u2115","\xa0","\xa0","\u224e\u0338","\u224f\u0338","\u2a43","\u0148","\u0146","\u2247","\u2a6d\u0338","\u2a42","\u043d","\u2013","\u2260","\u21d7","\u2924","\u2197","\u2197","\u2250\u0338","\u2262","\u2928","\u2242\u0338","\u2204","\u2204","\ud835\udd2b","\u2267\u0338","\u2271","\u2271","\u2267\u0338","\u2a7e\u0338","\u2a7e\u0338","\u2275","\u226f","\u226f","\u21ce","\u21ae","\u2af2","\u220b","\u22fc","\u22fa","\u220b","\u045a","\u21cd","\u2266\u0338","\u219a","\u2025","\u2270","\u219a","\u21ae","\u2270","\u2266\u0338","\u2a7d\u0338","\u2a7d\u0338","\u226e","\u2274","\u226e","\u22ea","\u22ec","\u2224","\ud835\udd5f","\xac","\xac","\u2209","\u22f9\u0338","\u22f5\u0338","\u2209","\u22f7","\u22f6","\u220c","\u220c","\u22fe","\u22fd","\u2226","\u2226","\u2afd\u20e5","\u2202\u0338","\u2a14","\u2280","\u22e0","\u2aaf\u0338","\u2280","\u2aaf\u0338","\u21cf","\u219b","\u2933\u0338","\u219d\u0338","\u219b","\u22eb","\u22ed","\u2281","\u22e1","\u2ab0\u0338","\ud835\udcc3","\u2224","\u2226","\u2241","\u2244","\u2244","\u2224","\u2226","\u22e2","\u22e3","\u2284","\u2ac5\u0338","\u2288","\u2282\u20d2","\u2288","\u2ac5\u0338","\u2281","\u2ab0\u0338","\u2285","\u2ac6\u0338","\u2289","\u2283\u20d2","\u2289","\u2ac6\u0338","\u2279","\xf1","\xf1","\u2278","\u22ea","\u22ec","\u22eb","\u22ed","\u03bd","#","\u2116","\u2007","\u22ad","\u2904","\u224d\u20d2","\u22ac","\u2265\u20d2",">\u20d2","\u29de","\u2902","\u2264\u20d2","<\u20d2","\u22b4\u20d2","\u2903","\u22b5\u20d2","\u223c\u20d2","\u21d6","\u2923","\u2196","\u2196","\u2927","\u24c8","\xf3","\xf3","\u229b","\u229a","\xf4","\xf4","\u043e","\u229d","\u0151","\u2a38","\u2299","\u29bc","\u0153","\u29bf","\ud835\udd2c","\u02db","\xf2","\xf2","\u29c1","\u29b5","\u03a9","\u222e","\u21ba","\u29be","\u29bb","\u203e","\u29c0","\u014d","\u03c9","\u03bf","\u29b6","\u2296","\ud835\udd60","\u29b7","\u29b9","\u2295","\u2228","\u21bb","\u2a5d","\u2134","\u2134","\xaa","\xaa","\xba","\xba","\u22b6","\u2a56","\u2a57","\u2a5b","\u2134","\xf8","\xf8","\u2298","\xf5","\xf5","\u2297","\u2a36","\xf6","\xf6","\u233d","\u2225","\xb6","\xb6","\u2225","\u2af3","\u2afd","\u2202","\u043f","%",".","\u2030","\u22a5","\u2031","\ud835\udd2d","\u03c6","\u03d5","\u2133","\u260e","\u03c0","\u22d4","\u03d6","\u210f","\u210e","\u210f","+","\u2a23","\u229e","\u2a22","\u2214","\u2a25","\u2a72","\xb1","\xb1","\u2a26","\u2a27","\xb1","\u2a15","\ud835\udd61","\xa3","\xa3","\u227a","\u2ab3","\u2ab7","\u227c","\u2aaf","\u227a","\u2ab7","\u227c","\u2aaf","\u2ab9","\u2ab5","\u22e8","\u227e","\u2032","\u2119","\u2ab5","\u2ab9","\u22e8","\u220f","\u232e","\u2312","\u2313","\u221d","\u221d","\u227e","\u22b0","\ud835\udcc5","\u03c8","\u2008","\ud835\udd2e","\u2a0c","\ud835\udd62","\u2057","\ud835\udcc6","\u210d","\u2a16","?","\u225f",'"','"',"\u21db","\u21d2","\u291c","\u290f","\u2964","\u223d\u0331","\u0155","\u221a","\u29b3","\u27e9","\u2992","\u29a5","\u27e9","\xbb","\xbb","\u2192","\u2975","\u21e5","\u2920","\u2933","\u291e","\u21aa","\u21ac","\u2945","\u2974","\u21a3","\u219d","\u291a","\u2236","\u211a","\u290d","\u2773","}","]","\u298c","\u298e","\u2990","\u0159","\u0157","\u2309","}","\u0440","\u2937","\u2969","\u201d","\u201d","\u21b3","\u211c","\u211b","\u211c","\u211d","\u25ad","\xae","\xae","\u297d","\u230b","\ud835\udd2f","\u21c1","\u21c0","\u296c","\u03c1","\u03f1","\u2192","\u21a3","\u21c1","\u21c0","\u21c4","\u21cc","\u21c9","\u219d","\u22cc","\u02da","\u2253","\u21c4","\u21cc","\u200f","\u23b1","\u23b1","\u2aee","\u27ed","\u21fe","\u27e7","\u2986","\ud835\udd63","\u2a2e","\u2a35",")","\u2994","\u2a12","\u21c9","\u203a","\ud835\udcc7","\u21b1","]","\u2019","\u2019","\u22cc","\u22ca","\u25b9","\u22b5","\u25b8","\u29ce","\u2968","\u211e","\u015b","\u201a","\u227b","\u2ab4","\u2ab8","\u0161","\u227d","\u2ab0","\u015f","\u015d","\u2ab6","\u2aba","\u22e9","\u2a13","\u227f","\u0441","\u22c5","\u22a1","\u2a66","\u21d8","\u2925","\u2198","\u2198","\xa7","\xa7",";","\u2929","\u2216","\u2216","\u2736","\ud835\udd30","\u2322","\u266f","\u0449","\u0448","\u2223","\u2225","\xad","\xad","\u03c3","\u03c2","\u03c2","\u223c","\u2a6a","\u2243","\u2243","\u2a9e","\u2aa0","\u2a9d","\u2a9f","\u2246","\u2a24","\u2972","\u2190","\u2216","\u2a33","\u29e4","\u2223","\u2323","\u2aaa","\u2aac","\u2aac\ufe00","\u044c","/","\u29c4","\u233f","\ud835\udd64","\u2660","\u2660","\u2225","\u2293","\u2293\ufe00","\u2294","\u2294\ufe00","\u228f","\u2291","\u228f","\u2291","\u2290","\u2292","\u2290","\u2292","\u25a1","\u25a1","\u25aa","\u25aa","\u2192","\ud835\udcc8","\u2216","\u2323","\u22c6","\u2606","\u2605","\u03f5","\u03d5","\xaf","\u2282","\u2ac5","\u2abd","\u2286","\u2ac3","\u2ac1","\u2acb","\u228a","\u2abf","\u2979","\u2282","\u2286","\u2ac5","\u228a","\u2acb","\u2ac7","\u2ad5","\u2ad3","\u227b","\u2ab8","\u227d","\u2ab0","\u2aba","\u2ab6","\u22e9","\u227f","\u2211","\u266a","\xb9","\xb9","\xb2","\xb2","\xb3","\xb3","\u2283","\u2ac6","\u2abe","\u2ad8","\u2287","\u2ac4","\u27c9","\u2ad7","\u297b","\u2ac2","\u2acc","\u228b","\u2ac0","\u2283","\u2287","\u2ac6","\u228b","\u2acc","\u2ac8","\u2ad4","\u2ad6","\u21d9","\u2926","\u2199","\u2199","\u292a","\xdf","\xdf","\u2316","\u03c4","\u23b4","\u0165","\u0163","\u0442","\u20db","\u2315","\ud835\udd31","\u2234","\u2234","\u03b8","\u03d1","\u03d1","\u2248","\u223c","\u2009","\u2248","\u223c","\xfe","\xfe","\u02dc","\xd7","\xd7","\u22a0","\u2a31","\u2a30","\u222d","\u2928","\u22a4","\u2336","\u2af1","\ud835\udd65","\u2ada","\u2929","\u2034","\u2122","\u25b5","\u25bf","\u25c3","\u22b4","\u225c","\u25b9","\u22b5","\u25ec","\u225c","\u2a3a","\u2a39","\u29cd","\u2a3b","\u23e2","\ud835\udcc9","\u0446","\u045b","\u0167","\u226c","\u219e","\u21a0","\u21d1","\u2963","\xfa","\xfa","\u2191","\u045e","\u016d","\xfb","\xfb","\u0443","\u21c5","\u0171","\u296e","\u297e","\ud835\udd32","\xf9","\xf9","\u21bf","\u21be","\u2580","\u231c","\u231c","\u230f","\u25f8","\u016b","\xa8","\xa8","\u0173","\ud835\udd66","\u2191","\u2195","\u21bf","\u21be","\u228e","\u03c5","\u03d2","\u03c5","\u21c8","\u231d","\u231d","\u230e","\u016f","\u25f9","\ud835\udcca","\u22f0","\u0169","\u25b5","\u25b4","\u21c8","\xfc","\xfc","\u29a7","\u21d5","\u2ae8","\u2ae9","\u22a8","\u299c","\u03f5","\u03f0","\u2205","\u03d5","\u03d6","\u221d","\u2195","\u03f1","\u03c2","\u228a\ufe00","\u2acb\ufe00","\u228b\ufe00","\u2acc\ufe00","\u03d1","\u22b2","\u22b3","\u0432","\u22a2","\u2228","\u22bb","\u225a","\u22ee","|","|","\ud835\udd33","\u22b2","\u2282\u20d2","\u2283\u20d2","\ud835\udd67","\u221d","\u22b3","\ud835\udccb","\u2acb\ufe00","\u228a\ufe00","\u2acc\ufe00","\u228b\ufe00","\u299a","\u0175","\u2a5f","\u2227","\u2259","\u2118","\ud835\udd34","\ud835\udd68","\u2118","\u2240","\u2240","\ud835\udccc","\u22c2","\u25ef","\u22c3","\u25bd","\ud835\udd35","\u27fa","\u27f7","\u03be","\u27f8","\u27f5","\u27fc","\u22fb","\u2a00","\ud835\udd69","\u2a01","\u2a02","\u27f9","\u27f6","\ud835\udccd","\u2a06","\u2a04","\u25b3","\u22c1","\u22c0","\xfd","\xfd","\u044f","\u0177","\u044b","\xa5","\xa5","\ud835\udd36","\u0457","\ud835\udd6a","\ud835\udcce","\u044e","\xff","\xff","\u017a","\u017e","\u0437","\u017c","\u2128","\u03b6","\ud835\udd37","\u0436","\u21dd","\ud835\udd6b","\ud835\udccf","\u200d","\u200c"],t.o) +B.L_={attributename:0,attributetype:1,basefrequency:2,baseprofile:3,calcmode:4,clippathunits:5,contentscripttype:6,contentstyletype:7,diffuseconstant:8,edgemode:9,externalresourcesrequired:10,filterres:11,filterunits:12,glyphref:13,gradienttransform:14,gradientunits:15,kernelmatrix:16,kernelunitlength:17,keypoints:18,keysplines:19,keytimes:20,lengthadjust:21,limitingconeangle:22,markerheight:23,markerunits:24,markerwidth:25,maskcontentunits:26,maskunits:27,numoctaves:28,pathlength:29,patterncontentunits:30,patterntransform:31,patternunits:32,pointsatx:33,pointsaty:34,pointsatz:35,preservealpha:36,preserveaspectratio:37,primitiveunits:38,refx:39,refy:40,repeatcount:41,repeatdur:42,requiredextensions:43,requiredfeatures:44,specularconstant:45,specularexponent:46,spreadmethod:47,startoffset:48,stddeviation:49,stitchtiles:50,surfacescale:51,systemlanguage:52,tablevalues:53,targetx:54,targety:55,textlength:56,viewbox:57,viewtarget:58,xchannelselector:59,ychannelselector:60,zoomandpan:61} +B.DI=new A.r(B.L_,["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","contentScriptType","contentStyleType","diffuseConstant","edgeMode","externalResourcesRequired","filterRes","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"],t.o) +B.L1={"null-character":0,"invalid-codepoint":1,"incorrectly-placed-solidus":2,"incorrect-cr-newline-entity":3,"illegal-windows-1252-entity":4,"cant-convert-numeric-entity":5,"illegal-codepoint-for-numeric-entity":6,"numeric-entity-without-semicolon":7,"expected-numeric-entity-but-got-eof":8,"expected-numeric-entity":9,"named-entity-without-semicolon":10,"expected-named-entity":11,"attributes-in-end-tag":12,"self-closing-flag-on-end-tag":13,"expected-tag-name-but-got-right-bracket":14,"expected-tag-name-but-got-question-mark":15,"expected-tag-name":16,[u.g]:17,"expected-closing-tag-but-got-eof":18,"expected-closing-tag-but-got-char":19,"eof-in-tag-name":20,"expected-attribute-name-but-got-eof":21,"eof-in-attribute-name":22,"invalid-character-in-attribute-name":23,"duplicate-attribute":24,"expected-end-of-tag-name-but-got-eof":25,"expected-attribute-value-but-got-eof":26,[u.F]:27,"equals-in-unquoted-attribute-value":28,[u.V]:29,"invalid-character-after-attribute-name":30,[u.H]:31,"eof-in-attribute-value-double-quote":32,"eof-in-attribute-value-single-quote":33,"eof-in-attribute-value-no-quotes":34,"unexpected-EOF-after-solidus-in-tag":35,[u.B]:36,"expected-dashes-or-doctype":37,[u.x]:38,"unexpected-space-after-double-dash-in-comment":39,"incorrect-comment":40,"eof-in-comment":41,"eof-in-comment-end-dash":42,[u.K]:43,"eof-in-comment-double-dash":44,"eof-in-comment-end-space-state":45,"eof-in-comment-end-bang-state":46,"unexpected-char-in-comment":47,"need-space-after-doctype":48,[u.f]:49,"expected-doctype-name-but-got-eof":50,"eof-in-doctype-name":51,"eof-in-doctype":52,[u.p]:53,"unexpected-end-of-doctype":54,"unexpected-char-in-doctype":55,"eof-in-innerhtml":56,"unexpected-doctype":57,"non-html-root":58,"expected-doctype-but-got-eof":59,"unknown-doctype":60,"expected-doctype-but-got-chars":61,"expected-doctype-but-got-start-tag":62,"expected-doctype-but-got-end-tag":63,"end-tag-after-implied-root":64,"expected-named-closing-tag-but-got-eof":65,"two-heads-are-not-better-than-one":66,"unexpected-end-tag":67,"unexpected-start-tag-out-of-my-head":68,"unexpected-start-tag":69,"missing-end-tag":70,"missing-end-tags":71,"unexpected-start-tag-implies-end-tag":72,"unexpected-start-tag-treated-as":73,"deprecated-tag":74,"unexpected-start-tag-ignored":75,"expected-one-end-tag-but-got-another":76,"end-tag-too-early":77,"end-tag-too-early-named":78,"end-tag-too-early-ignored":79,"adoption-agency-1.1":80,"adoption-agency-1.2":81,"adoption-agency-1.3":82,"unexpected-end-tag-treated-as":83,"no-end-tag":84,"unexpected-implied-end-tag-in-table":85,"unexpected-implied-end-tag-in-table-body":86,"unexpected-char-implies-table-voodoo":87,"unexpected-hidden-input-in-table":88,"unexpected-form-in-table":89,[u.M]:90,"unexpected-end-tag-implies-table-voodoo":91,"unexpected-cell-in-table-body":92,"unexpected-cell-end-tag":93,"unexpected-end-tag-in-table-body":94,"unexpected-implied-end-tag-in-table-row":95,"unexpected-end-tag-in-table-row":96,"unexpected-select-in-select":97,"unexpected-input-in-select":98,"unexpected-start-tag-in-select":99,"unexpected-end-tag-in-select":100,[u.a]:101,[u.r]:102,"unexpected-char-after-body":103,"unexpected-start-tag-after-body":104,"unexpected-end-tag-after-body":105,"unexpected-char-in-frameset":106,"unexpected-start-tag-in-frameset":107,[u.q]:108,"unexpected-end-tag-in-frameset":109,"unexpected-char-after-frameset":110,"unexpected-start-tag-after-frameset":111,"unexpected-end-tag-after-frameset":112,"unexpected-end-tag-after-body-innerhtml":113,"expected-eof-but-got-char":114,"expected-eof-but-got-start-tag":115,"expected-eof-but-got-end-tag":116,"eof-in-table":117,"eof-in-select":118,"eof-in-frameset":119,"eof-in-script-in-script":120,"eof-in-foreign-lands":121,"non-void-element-with-trailing-solidus":122,[u.G]:123,"unexpected-end-tag-before-html":124,"undefined-error":125} +B.fX=new A.r(B.L1,["Null character in input stream, replaced with U+FFFD.","Invalid codepoint in stream.","Solidus (/) incorrectly placed in tag.","Incorrect CR newline entity, replaced with LF.","Entity used with illegal number (windows-1252 reference).","Numeric entity couldn't be converted to character (codepoint U+%(charAsInt)08x).","Numeric entity represents an illegal codepoint: U+%(charAsInt)08x.","Numeric entity didn't end with ';'.","Numeric entity expected. Got end of file instead.","Numeric entity expected but none found.","Named entity didn't end with ';'.","Named entity expected. Got none.","End tag contains unexpected attributes.","End tag contains unexpected self-closing flag.","Expected tag name. Got '>' instead.","Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)","Expected tag name. Got something else instead","Expected closing tag. Got '>' instead. Ignoring ''.","Expected closing tag. Unexpected end of file.","Expected closing tag. Unexpected character '%(data)s' found.","Unexpected end of file in the tag name.","Unexpected end of file. Expected attribute name instead.","Unexpected end of file in attribute name.","Invalid character in attribute name","Dropped duplicate attribute on tag.","Unexpected end of file. Expected = or end of tag.","Unexpected end of file. Expected attribute value.","Expected attribute value. Got '>' instead.","Unexpected = in unquoted attribute","Unexpected character in unquoted attribute","Unexpected character after attribute name.","Unexpected character after attribute value.",'Unexpected end of file in attribute value (".',"Unexpected end of file in attribute value (').","Unexpected end of file in attribute value.","Unexpected end of file in tag. Expected >","Unexpected character after / in tag. Expected >","Expected '--' or 'DOCTYPE'. Not found.","Unexpected ! after -- in comment","Unexpected space after -- in comment","Incorrect comment.","Unexpected end of file in comment.","Unexpected end of file in comment (-)","Unexpected '-' after '--' found in comment.","Unexpected end of file in comment (--).","Unexpected end of file in comment.","Unexpected end of file in comment.","Unexpected character in comment found.","No space after literal string 'DOCTYPE'.","Unexpected > character. Expected DOCTYPE name.","Unexpected end of file. Expected DOCTYPE name.","Unexpected end of file in DOCTYPE name.","Unexpected end of file in DOCTYPE.","Expected space or '>'. Got '%(data)s'","Unexpected end of DOCTYPE.","Unexpected character in DOCTYPE.","XXX innerHTML EOF","Unexpected DOCTYPE. Ignored.","html needs to be the first start tag.","Unexpected End of file. Expected DOCTYPE.","Erroneous DOCTYPE.","Unexpected non-space characters. Expected DOCTYPE.","Unexpected start tag (%(name)s). Expected DOCTYPE.","Unexpected end tag (%(name)s). Expected DOCTYPE.","Unexpected end tag (%(name)s) after the (implied) root element.","Unexpected end of file. Expected end tag (%(name)s).","Unexpected start tag head in existing head. Ignored.","Unexpected end tag (%(name)s). Ignored.","Unexpected start tag (%(name)s) that can be in head. Moved.","Unexpected start tag (%(name)s).","Missing end tag (%(name)s).","Missing end tags (%(name)s).","Unexpected start tag (%(startName)s) implies end tag (%(endName)s).","Unexpected start tag (%(originalName)s). Treated as %(newName)s.","Unexpected start tag %(name)s. Don't use it!","Unexpected start tag %(name)s. Ignored.","Unexpected end tag (%(gotName)s). Missing end tag (%(expectedName)s).","End tag (%(name)s) seen too early. Expected other end tag.","Unexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s).","End tag (%(name)s) seen too early. Ignored.","End tag (%(name)s) violates step 1, paragraph 1 of the adoption agency algorithm.","End tag (%(name)s) violates step 1, paragraph 2 of the adoption agency algorithm.","End tag (%(name)s) violates step 1, paragraph 3 of the adoption agency algorithm.","Unexpected end tag (%(originalName)s). Treated as %(newName)s.","This element (%(name)s) has no end tag.","Unexpected implied end tag (%(name)s) in the table phase.","Unexpected implied end tag (%(name)s) in the table body phase.","Unexpected non-space characters in table context caused voodoo mode.","Unexpected input with type hidden in table context.","Unexpected form in table context.","Unexpected start tag (%(name)s) in table context caused voodoo mode.","Unexpected end tag (%(name)s) in table context caused voodoo mode.","Unexpected table cell start tag (%(name)s) in the table body phase.","Got table cell end tag (%(name)s) while required end tags are missing.","Unexpected end tag (%(name)s) in the table body phase. Ignored.","Unexpected implied end tag (%(name)s) in the table row phase.","Unexpected end tag (%(name)s) in the table row phase. Ignored.","Unexpected select start tag in the select phase treated as select end tag.","Unexpected input start tag in the select phase.","Unexpected start tag token (%(name)s in the select phase. Ignored.","Unexpected end tag (%(name)s) in the select phase. Ignored.","Unexpected table element start tag (%(name)s) in the select in table phase.","Unexpected table element end tag (%(name)s) in the select in table phase.","Unexpected non-space characters in the after body phase.","Unexpected start tag token (%(name)s) in the after body phase.","Unexpected end tag token (%(name)s) in the after body phase.","Unexpected characters in the frameset phase. Characters ignored.","Unexpected start tag token (%(name)s) in the frameset phase. Ignored.","Unexpected end tag token (frameset) in the frameset phase (innerHTML).","Unexpected end tag token (%(name)s) in the frameset phase. Ignored.","Unexpected non-space characters in the after frameset phase. Ignored.","Unexpected start tag (%(name)s) in the after frameset phase. Ignored.","Unexpected end tag (%(name)s) in the after frameset phase. Ignored.","Unexpected end tag after body(innerHtml)","Unexpected non-space characters. Expected end of file.","Unexpected start tag (%(name)s). Expected end of file.","Unexpected end tag (%(name)s). Expected end of file.","Unexpected end of file. Expected table content.","Unexpected end of file. Expected select content.","Unexpected end of file. Expected frameset content.","Unexpected end of file. Expected script content.","Unexpected end of file. Expected foreign content","Trailing solidus not allowed on element %(name)s","Element %(name)s not allowed in a non-html context","Unexpected end tag (%(name)s) before html.","Undefined error (this sucks and should be fixed)"],t.o) +B.hx=new A.ns(!1) +B.cG=new A.ag('"',1,"DOUBLE_QUOTE") +B.Mg=new A.l("",B.cG) +B.LQ=new A.l("http://www.w3.org/1999/xhtml","address") +B.hI=new A.l("http://www.w3.org/1999/xhtml","applet") +B.LK=new A.l("http://www.w3.org/1999/xhtml","area") +B.Mf=new A.l("http://www.w3.org/1999/xhtml","article") +B.LW=new A.l("http://www.w3.org/1999/xhtml","aside") +B.LR=new A.l("http://www.w3.org/1999/xhtml","base") +B.LA=new A.l("http://www.w3.org/1999/xhtml","basefont") +B.Lv=new A.l("http://www.w3.org/1999/xhtml","bgsound") +B.Li=new A.l("http://www.w3.org/1999/xhtml","blockquote") +B.LB=new A.l("http://www.w3.org/1999/xhtml","body") +B.Lo=new A.l("http://www.w3.org/1999/xhtml","br") +B.hF=new A.l("http://www.w3.org/1999/xhtml","button") +B.hE=new A.l("http://www.w3.org/1999/xhtml","caption") +B.M8=new A.l("http://www.w3.org/1999/xhtml","center") +B.M7=new A.l("http://www.w3.org/1999/xhtml","col") +B.Le=new A.l("http://www.w3.org/1999/xhtml","colgroup") +B.Mc=new A.l("http://www.w3.org/1999/xhtml","command") +B.LM=new A.l("http://www.w3.org/1999/xhtml","dd") +B.LT=new A.l("http://www.w3.org/1999/xhtml","details") +B.Lf=new A.l("http://www.w3.org/1999/xhtml","dir") +B.Ln=new A.l("http://www.w3.org/1999/xhtml","div") +B.LS=new A.l("http://www.w3.org/1999/xhtml","dl") +B.Lc=new A.l("http://www.w3.org/1999/xhtml","dt") +B.Lp=new A.l("http://www.w3.org/1999/xhtml","embed") +B.Ma=new A.l("http://www.w3.org/1999/xhtml","fieldset") +B.Lb=new A.l("http://www.w3.org/1999/xhtml","figure") +B.M9=new A.l("http://www.w3.org/1999/xhtml","footer") +B.M1=new A.l("http://www.w3.org/1999/xhtml","form") +B.Lg=new A.l("http://www.w3.org/1999/xhtml","frame") +B.LP=new A.l("http://www.w3.org/1999/xhtml","frameset") +B.M0=new A.l("http://www.w3.org/1999/xhtml","h1") +B.Lh=new A.l("http://www.w3.org/1999/xhtml","h2") +B.Ll=new A.l("http://www.w3.org/1999/xhtml","h3") +B.LN=new A.l("http://www.w3.org/1999/xhtml","h4") +B.LO=new A.l("http://www.w3.org/1999/xhtml","h5") +B.LV=new A.l("http://www.w3.org/1999/xhtml","h6") +B.M6=new A.l("http://www.w3.org/1999/xhtml","head") +B.LI=new A.l("http://www.w3.org/1999/xhtml","header") +B.M4=new A.l("http://www.w3.org/1999/xhtml","hr") +B.cA=new A.l("http://www.w3.org/1999/xhtml","html") +B.Lj=new A.l("http://www.w3.org/1999/xhtml","iframe") +B.LH=new A.l("http://www.w3.org/1999/xhtml","image") +B.Ld=new A.l("http://www.w3.org/1999/xhtml","img") +B.Mh=new A.l("http://www.w3.org/1999/xhtml","input") +B.Lm=new A.l("http://www.w3.org/1999/xhtml","isindex") +B.M5=new A.l("http://www.w3.org/1999/xhtml","li") +B.LC=new A.l("http://www.w3.org/1999/xhtml","link") +B.Lz=new A.l("http://www.w3.org/1999/xhtml","listing") +B.hD=new A.l("http://www.w3.org/1999/xhtml","marquee") +B.M3=new A.l("http://www.w3.org/1999/xhtml","men") +B.Lk=new A.l("http://www.w3.org/1999/xhtml","meta") +B.LU=new A.l("http://www.w3.org/1999/xhtml","nav") +B.Md=new A.l("http://www.w3.org/1999/xhtml","noembed") +B.LJ=new A.l("http://www.w3.org/1999/xhtml","noframes") +B.Lr=new A.l("http://www.w3.org/1999/xhtml","noscript") +B.hy=new A.l("http://www.w3.org/1999/xhtml","object") +B.hN=new A.l("http://www.w3.org/1999/xhtml","ol") +B.Ls=new A.l("http://www.w3.org/1999/xhtml","p") +B.LL=new A.l("http://www.w3.org/1999/xhtml","param") +B.Lx=new A.l("http://www.w3.org/1999/xhtml","plaintext") +B.Ly=new A.l("http://www.w3.org/1999/xhtml","pre") +B.LZ=new A.l("http://www.w3.org/1999/xhtml","script") +B.Lq=new A.l("http://www.w3.org/1999/xhtml","section") +B.Lt=new A.l("http://www.w3.org/1999/xhtml","select") +B.M2=new A.l("http://www.w3.org/1999/xhtml","style") +B.cz=new A.l("http://www.w3.org/1999/xhtml","table") +B.Lu=new A.l("http://www.w3.org/1999/xhtml","tbody") +B.hB=new A.l("http://www.w3.org/1999/xhtml","td") +B.Mi=new A.l("http://www.w3.org/1999/xhtml","textarea") +B.LG=new A.l("http://www.w3.org/1999/xhtml","tfoot") +B.hJ=new A.l("http://www.w3.org/1999/xhtml","th") +B.Me=new A.l("http://www.w3.org/1999/xhtml","thead") +B.LD=new A.l("http://www.w3.org/1999/xhtml","title") +B.LF=new A.l("http://www.w3.org/1999/xhtml","tr") +B.hC=new A.l("http://www.w3.org/1999/xhtml","ul") +B.LY=new A.l("http://www.w3.org/1999/xhtml","wbr") +B.LX=new A.l("http://www.w3.org/1999/xhtml","xmp") +B.cB=new A.l("http://www.w3.org/2000/svg","foreignObject") +B.cC=new A.aP([B.LQ,B.hI,B.LK,B.Mf,B.LW,B.LR,B.LA,B.Lv,B.Li,B.LB,B.Lo,B.hF,B.hE,B.M8,B.M7,B.Le,B.Mc,B.LM,B.LT,B.Lf,B.Ln,B.LS,B.Lc,B.Lp,B.Ma,B.Lb,B.M9,B.M1,B.Lg,B.LP,B.M0,B.Lh,B.Ll,B.LN,B.LO,B.LV,B.M6,B.LI,B.M4,B.cA,B.Lj,B.LH,B.Ld,B.Mh,B.Lm,B.M5,B.LC,B.Lz,B.hD,B.M3,B.Lk,B.LU,B.Md,B.LJ,B.Lr,B.hy,B.hN,B.Ls,B.LL,B.Lx,B.Ly,B.LZ,B.Lq,B.Lt,B.M2,B.cz,B.Lu,B.hB,B.Mi,B.LG,B.hJ,B.Me,B.LD,B.LF,B.hC,B.LY,B.LX,B.cB],t.m) +B.Mj=new A.aP([B.hF],t.m) +B.L7={h1:0,h2:1,h3:2,h4:3,h5:4,h6:5,p:6,div:7,li:8,blockquote:9,pre:10,tr:11,figure:12} +B.Mk=new A.b8(B.L7,13,t.b) +B.Ml=new A.aP([38,62,34,39,61,60,96,32,10,13,9,12],A.a_("aP")) +B.hW=new A.bm(0,"ATTRIBUTE") +B.aB=new A.aP([B.hW],t.fr) +B.bA=new A.bm(1,"CDATA") +B.bD=new A.bm(2,"COMMENT") +B.cH=new A.bm(3,"DECLARATION") +B.cI=new A.bm(4,"DOCUMENT_TYPE") +B.aT=new A.bm(7,"ELEMENT") +B.bB=new A.bm(10,"PROCESSING") +B.bC=new A.bm(11,"TEXT") +B.hO=new A.aP([B.bA,B.bD,B.cH,B.cI,B.aT,B.bB,B.bC],t.fr) +B.L6={ol:0,ul:1,menu:2} +B.Mm=new A.b8(B.L6,3,t.b) +B.hA=new A.l("http://www.w3.org/1998/Math/MathML","mi") +B.hH=new A.l("http://www.w3.org/1998/Math/MathML","mo") +B.hM=new A.l("http://www.w3.org/1998/Math/MathML","mn") +B.hz=new A.l("http://www.w3.org/1998/Math/MathML","ms") +B.hL=new A.l("http://www.w3.org/1998/Math/MathML","mtext") +B.hP=new A.aP([B.hA,B.hH,B.hM,B.hz,B.hL],t.m) +B.KV={style:0,script:1,xmp:2,iframe:3,noembed:4,noframes:5,noscript:6} +B.Mn=new A.b8(B.KV,7,t.b) +B.KZ={table:0,tbody:1,tfoot:2,thead:3,tr:4} +B.hQ=new A.b8(B.KZ,5,t.b) +B.La={script:0,form:1,iframe:2,object:3,embed:4,input:5,button:6,link:7,style:8,video:9,audio:10,source:11,track:12,use:13} +B.hR=new A.b8(B.La,14,t.b) +B.cD=new A.b8(B.aS,0,A.a_("b8<+(e,e)>")) +B.Mo=new A.aP([B.hN,B.hC],t.m) +B.bz=new A.aP([B.bA,B.bD,B.aT,B.bB,B.bC],t.fr) +B.L5={em:0,i:1} +B.Mp=new A.b8(B.L5,2,t.b) +B.M_=new A.l("http://www.w3.org/1999/xhtml","optgroup") +B.Mb=new A.l("http://www.w3.org/1999/xhtml","option") +B.Mq=new A.aP([B.M_,B.Mb],t.m) +B.L2={strong:0,b:1,th:2} +B.Mr=new A.b8(B.L2,3,t.b) +B.Ms=new A.aP([B.cA,B.cz],t.m) +B.LE=new A.l("http://www.w3.org/1998/Math/MathML","annotation-xml") +B.hK=new A.l("http://www.w3.org/2000/svg","desc") +B.hG=new A.l("http://www.w3.org/2000/svg","title") +B.cE=new A.aP([B.hI,B.hE,B.cA,B.hD,B.hy,B.cz,B.hB,B.hJ,B.hA,B.hH,B.hM,B.hz,B.hL,B.LE,B.cB,B.hK,B.hG],t.m) +B.L4={after:0,before:1,"first-letter":2,"first-line":3} +B.Mt=new A.b8(B.L4,4,t.b) +B.Lw=new A.l("http://www.w3.org/1998/Math/MathML","annotaion-xml") +B.Mu=new A.aP([B.Lw,B.cB,B.hK,B.hG],t.m) +B.KX={h1:0,h2:1,h3:2,h4:3,h5:4,h6:5} +B.hS=new A.b8(B.KX,6,t.b) +B.hT=new A.d3("") +B.hU=new A.cf("_throwNoParent") +B.Mv=new A.cf("call") +B.Mw=A.c7("zJ") +B.Mx=A.c7("zK") +B.My=A.c7("vM") +B.Mz=A.c7("vN") +B.MA=A.c7("vT") +B.MB=A.c7("iQ") +B.MC=A.c7("vU") +B.MD=A.c7("p") +B.ME=A.c7("qn") +B.MF=A.c7("qo") +B.MG=A.c7("wT") +B.MH=A.c7("jZ") +B.hV=new A.k5(!1) +B.MI=new A.ag("'",0,"SINGLE_QUOTE") +B.MJ=new A.bm(5,"DOCUMENT") +B.hX=new A.bm(6,"DOCUMENT_FRAGMENT") +B.aC=new A.h7(0,"none") +B.hY=new A.h7(1,"zipCrypto") +B.hZ=new A.h7(2,"aes")})();(function staticFields(){$.oQ=null +$.bF=A.i([],A.a_("y

")) +$.rO=null +$.rh=null +$.rg=null +$.uv=null +$.ug=null +$.uH=null +$.py=null +$.pI=null +$.qV=null +$.oV=A.i([],A.a_("y?>")) +$.eF=null +$.hD=null +$.hE=null +$.qM=!1 +$.an=B.a3 +$.tl=null +$.tm=null +$.tn=null +$.to=null +$.qs=A.oC("_lastQuoRemDigits") +$.qt=A.oC("_lastQuoRemUsed") +$.h9=A.oC("_lastRemUsed") +$.qu=A.oC("_lastRem_nsh") +$.t6="" +$.t7=null +$.aM=A.i([4294967295,2147483647,1073741823,536870911,268435455,134217727,67108863,33554431,16777215,8388607,4194303,2097151,1048575,524287,262143,131071,65535,32767,16383,8191,4095,2047,1023,511,255,127,63,31,15,7,3,1,0],t.Z) +$.eE=A.tr() +$.cY=null +$.u_=null +$.pe=null})();(function lazyInitializers(){var s=hunkHelpers.lazyFinal +s($,"zL","r3",()=>A.z7("_$dart_dartClosure")) +s($,"Ak","vd",()=>A.i([new J.iU()],A.a_("y"))) +s($,"zW","uU",()=>A.cD(A.nR({ +toString:function(){return"$receiver$"}}))) +s($,"zX","uV",()=>A.cD(A.nR({$method$:null, +toString:function(){return"$receiver$"}}))) +s($,"zY","uW",()=>A.cD(A.nR(null))) +s($,"zZ","uX",()=>A.cD(function(){var $argumentsExpr$="$arguments$" +try{null.$method$($argumentsExpr$)}catch(r){return r.message}}())) +s($,"A1","v_",()=>A.cD(A.nR(void 0))) +s($,"A2","v0",()=>A.cD(function(){var $argumentsExpr$="$arguments$" +try{(void 0).$method$($argumentsExpr$)}catch(r){return r.message}}())) +s($,"A0","uZ",()=>A.cD(A.t3(null))) +s($,"A_","uY",()=>A.cD(function(){try{null.$method$}catch(r){return r.message}}())) +s($,"A4","v2",()=>A.cD(A.t3(void 0))) +s($,"A3","v1",()=>A.cD(function(){try{(void 0).$method$}catch(r){return r.message}}())) +s($,"A5","r5",()=>A.x3()) +s($,"Af","v9",()=>A.mP(4096)) +s($,"Ad","v7",()=>new A.p3().$0()) +s($,"Ae","v8",()=>new A.p2().$0()) +s($,"A6","v3",()=>A.w8(A.hC(A.i([-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-2,-2,-2,-2,-2,62,-2,62,-2,63,52,53,54,55,56,57,58,59,60,61,-2,-2,-2,-1,-2,-2,-2,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,-2,-2,-2,-2,63,-2,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,-2,-2,-2,-2,-2],t.Z)))) +s($,"Ac","c8",()=>A.kz(0)) +s($,"Aa","dR",()=>A.kz(1)) +s($,"Ab","v6",()=>A.kz(2)) +s($,"A9","r6",()=>$.dR().bT(0)) +s($,"A7","v4",()=>A.kz(1e4)) +s($,"A8","v5",()=>A.mP(8)) +s($,"Ah","lD",()=>A.lB(B.MD)) +s($,"zG","dd",()=>A.mP(0)) +s($,"zI","uP",()=>A.mP(0)) +s($,"zH","uO",()=>A.w7(0)) +s($,"zN","uR",()=>A.ix(B.jm)) +s($,"zM","uQ",()=>A.ix(B.iV)) +s($,"An","pZ",()=>new A.lO($.r4())) +s($,"zS","uS",()=>new A.jB(A.a5("/",!0),A.a5("[^/]$",!0),A.a5("^/",!0))) +s($,"zU","lC",()=>new A.k9(A.a5("[/\\\\]",!0),A.a5("[^/\\\\]$",!0),A.a5("^(\\\\\\\\[^\\\\]+\\\\[^\\\\/]+|[a-zA-Z]:[/\\\\])",!0),A.a5("^[/\\\\](?![/\\\\])",!0))) +s($,"zT","hF",()=>new A.k3(A.a5("/",!0),A.a5("(^[a-zA-Z][-+.a-zA-Z\\d]*://|[^/])$",!0),A.a5("[a-zA-Z][-+.a-zA-Z\\d]*://[^/]*",!0),A.a5("^/",!0))) +s($,"zR","r4",()=>A.wR()) +s($,"zV","uT",()=>new A.jg("newline expected")) +s($,"Ai","vb",()=>A.tZ(!1)) +s($,"Aj","vc",()=>A.tZ(!0)) +s($,"Am","r7",()=>A.a5("[&<\\u0001-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u0084\\u0086-\\u009f]|]]>",!0)) +s($,"Al","ve",()=>A.a5("['&<\\n\\r\\t\\u0001-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u0084\\u0086-\\u009f]",!0)) +s($,"Ag","va",()=>A.a5('["&<\\n\\r\\t\\u0001-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u0084\\u0086-\\u009f]',!0)) +s($,"Ap","vf",()=>new A.ka(new A.pz(),5,A.az(t.j7,A.a_("n")),A.a_("ka>")))})();(function nativeSupport(){!function(){var s=function(a){var m={} +m[a]=1 +return Object.keys(hunkHelpers.convertToFastObject(m))[0]} +v.getIsolateTag=function(a){return s("___dart_"+a+v.isolateTag)} +var r="___dart_isolate_tags_" +var q=Object[r]||(Object[r]=Object.create(null)) +var p="_ZxYxX" +for(var o=0;;o++){var n=s(p+"_"+o+"_") +if(!(n in q)){q[n]=1 +v.isolateTag=n +break}}v.dispatchPropertyName=v.getIsolateTag("dispatch_record")}() +hunkHelpers.setOrUpdateInterceptorsByTag({ArrayBuffer:A.dv,SharedArrayBuffer:A.dv,ArrayBufferView:A.fu,DataView:A.j7,Float32Array:A.j8,Float64Array:A.j9,Int16Array:A.ja,Int32Array:A.jb,Int8Array:A.jc,Uint16Array:A.jd,Uint32Array:A.fv,Uint8ClampedArray:A.fw,CanvasPixelArray:A.fw,Uint8Array:A.dw}) +hunkHelpers.setOrUpdateLeafTags({ArrayBuffer:true,SharedArrayBuffer:true,ArrayBufferView:false,DataView:true,Float32Array:true,Float64Array:true,Int16Array:true,Int32Array:true,Int8Array:true,Uint16Array:true,Uint32Array:true,Uint8ClampedArray:true,CanvasPixelArray:true,Uint8Array:false}) +A.aW.$nativeSuperclassTag="ArrayBufferView" +A.hh.$nativeSuperclassTag="ArrayBufferView" +A.hi.$nativeSuperclassTag="ArrayBufferView" +A.ft.$nativeSuperclassTag="ArrayBufferView" +A.hj.$nativeSuperclassTag="ArrayBufferView" +A.hk.$nativeSuperclassTag="ArrayBufferView" +A.by.$nativeSuperclassTag="ArrayBufferView"})() +Function.prototype.$1=function(a){return this(a)} +Function.prototype.$2=function(a,b){return this(a,b)} +Function.prototype.$0=function(){return this()} +Function.prototype.$2$0=function(){return this()} +Function.prototype.$1$1=function(a){return this(a)} +Function.prototype.$3=function(a,b,c){return this(a,b,c)} +Function.prototype.$4=function(a,b,c,d){return this(a,b,c,d)} +Function.prototype.$1$0=function(){return this()} +Function.prototype.$5=function(a,b,c,d,e){return this(a,b,c,d,e)} +Function.prototype.$8=function(a,b,c,d,e,f,g,h){return this(a,b,c,d,e,f,g,h)} +convertAllToFastObject(w) +convertToFastObject($);(function(a){if(typeof document==="undefined"){a(null) +return}if(typeof document.currentScript!="undefined"){a(document.currentScript) +return}var s=document.scripts +function onLoad(b){for(var q=0;q :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/example/lib/main.dart b/example/lib/main.dart index 1f75dcc..f4a7f00 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,3 +1,4 @@ +import 'package:file_selector/file_selector.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:papyrus_reader/papyrus_reader.dart'; @@ -7,9 +8,10 @@ void main() { } final class PapyrusReaderDemoApp extends StatefulWidget { - const PapyrusReaderDemoApp({this.memory, super.key}); + const PapyrusReaderDemoApp({this.memory, this.registry, super.key}); final DemoReaderMemory? memory; + final ReaderEngineRegistry? registry; @override State createState() => _PapyrusReaderDemoAppState(); @@ -43,6 +45,7 @@ final class _PapyrusReaderDemoAppState extends State { }); }, memory: _memory, + registry: widget.registry, ), ); } @@ -84,6 +87,7 @@ final class _DemoLibrary extends StatelessWidget { required this.isDark, required this.toggleTheme, required this.memory, + this.registry, }); static const documents = [ @@ -98,12 +102,23 @@ final class _DemoLibrary extends StatelessWidget { icon: Icons.auto_stories_rounded, actionLabel: 'Read EPUB', ), + _DemoDocument( + id: 'reading-lab', + title: 'The Reading Lab', + author: 'Papyrus Studio', + description: + 'Long chapters with rich text for testing page turns, reflow and resume.', + format: ReaderFormat.epub, + assetPath: 'assets/reading_lab.epub', + icon: Icons.chrome_reader_mode_rounded, + actionLabel: 'Explore layouts', + ), _DemoDocument( id: 'tiny-pdf', title: 'A Tiny PDF', author: 'Papyrus Studio', description: - 'One valid, pocket-sized page for trying fixed document reading.', + 'Three pocket-sized pages for trying navigation and PDF resume.', format: ReaderFormat.pdf, assetPath: 'assets/a_tiny_pdf.pdf', icon: Icons.picture_as_pdf_rounded, @@ -114,6 +129,7 @@ final class _DemoLibrary extends StatelessWidget { final bool isDark; final VoidCallback toggleTheme; final DemoReaderMemory memory; + final ReaderEngineRegistry? registry; @override Widget build(BuildContext context) { @@ -123,6 +139,11 @@ final class _DemoLibrary extends StatelessWidget { appBar: AppBar( title: const Text('Papyrus Reader'), actions: [ + IconButton( + tooltip: 'Open a book', + icon: const Icon(Icons.folder_open_rounded), + onPressed: () => _openFile(context), + ), IconButton( tooltip: isDark ? 'Use light theme' : 'Use dark theme', onPressed: toggleTheme, @@ -251,6 +272,7 @@ final class _DemoLibrary extends StatelessWidget { MaterialPageRoute( builder: (context) => PapyrusReader( document: readerDocument, + registry: registry, initialLocator: memory.locatorFor(demo.id), initialPreferences: memory.preferencesFor(demo.id), onBack: () => Navigator.of(context).pop(), @@ -262,6 +284,58 @@ final class _DemoLibrary extends StatelessWidget { ); } + Future _openFile(BuildContext context) async { + try { + final file = await openFile( + acceptedTypeGroups: const [ + XTypeGroup( + label: 'Books', + extensions: ['epub', 'pdf'], + mimeTypes: ['application/epub+zip', 'application/pdf'], + uniformTypeIdentifiers: [ + 'org.idpf.epub-container', + 'com.adobe.pdf', + ], + ), + ], + ); + if (file == null || !context.mounted) return; + final extension = file.name.split('.').last.toLowerCase(); + if (extension != 'epub' && extension != 'pdf') { + throw const FormatException('Choose an EPUB or PDF document.'); + } + final id = + 'file:${file.name}:${await file.length()}:${await file.lastModified()}'; + if (!context.mounted) return; + final document = ReaderDocument( + id: id, + title: file.name, + format: extension == 'epub' ? ReaderFormat.epub : ReaderFormat.pdf, + loadBytes: file.readAsBytes, + ); + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => PapyrusReader( + document: document, + registry: registry, + initialLocator: memory.locatorFor(id), + initialPreferences: memory.preferencesFor(id), + onLocatorChanged: (locator) => memory.saveLocator(id, locator), + onPreferencesChanged: (preferences) => + memory.savePreferences(id, preferences), + onBack: () => Navigator.of(context).pop(), + ), + ), + ); + } catch (error) { + if (context.mounted) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Could not open the file: $error')), + ); + } + } + } + Future _loadAsset(String path) async { final data = await rootBundle.load(path); diff --git a/example/linux/flutter/generated_plugin_registrant.cc b/example/linux/flutter/generated_plugin_registrant.cc index f6f23bf..7299b5c 100644 --- a/example/linux/flutter/generated_plugin_registrant.cc +++ b/example/linux/flutter/generated_plugin_registrant.cc @@ -6,9 +6,13 @@ #include "generated_plugin_registrant.h" +#include #include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); + file_selector_plugin_register_with_registrar(file_selector_linux_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); diff --git a/example/linux/flutter/generated_plugins.cmake b/example/linux/flutter/generated_plugins.cmake index df8d2f7..886932b 100644 --- a/example/linux/flutter/generated_plugins.cmake +++ b/example/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + file_selector_linux url_launcher_linux ) diff --git a/example/macos/Flutter/Flutter-Debug.xcconfig b/example/macos/Flutter/Flutter-Debug.xcconfig index c2efd0b..4b81f9b 100644 --- a/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/macos/Flutter/Flutter-Release.xcconfig b/example/macos/Flutter/Flutter-Release.xcconfig index c2efd0b..5caa9d1 100644 --- a/example/macos/Flutter/Flutter-Release.xcconfig +++ b/example/macos/Flutter/Flutter-Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/macos/Flutter/GeneratedPluginRegistrant.swift b/example/macos/Flutter/GeneratedPluginRegistrant.swift index aeb0eb5..4388b7e 100644 --- a/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,10 +5,12 @@ import FlutterMacOS import Foundation +import file_selector_macos import pdfium_flutter import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) PDFiumFlutterPlugin.register(with: registry.registrar(forPlugin: "PDFiumFlutterPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/example/macos/Podfile b/example/macos/Podfile new file mode 100644 index 0000000..c727d8f --- /dev/null +++ b/example/macos/Podfile @@ -0,0 +1,48 @@ +platform :osx, '12.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + target.build_configurations.each do |config| + deployment = config.build_settings['MACOSX_DEPLOYMENT_TARGET'] || '12.0' + if Gem::Version.new(deployment) < Gem::Version.new('12.0') + config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '12.0' + end + end + end +end diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock new file mode 100644 index 0000000..5e1f9eb --- /dev/null +++ b/example/macos/Podfile.lock @@ -0,0 +1,35 @@ +PODS: + - file_selector_macos (0.0.1): + - FlutterMacOS + - FlutterMacOS (1.0.0) + - pdfium_flutter (0.1.5): + - Flutter + - FlutterMacOS + - url_launcher_macos (0.0.1): + - FlutterMacOS + +DEPENDENCIES: + - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - pdfium_flutter (from `Flutter/ephemeral/.symlinks/plugins/pdfium_flutter/darwin`) + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + +EXTERNAL SOURCES: + file_selector_macos: + :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos + FlutterMacOS: + :path: Flutter/ephemeral + pdfium_flutter: + :path: Flutter/ephemeral/.symlinks/plugins/pdfium_flutter/darwin + url_launcher_macos: + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + +SPEC CHECKSUMS: + file_selector_macos: 9e9e068e90ebee155097d00e89ae91edb2374db7 + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + pdfium_flutter: e5a6e881af0b182d5b0465ebad23a8a20caa28d4 + url_launcher_macos: f87a979182d112f911de6820aefddaf56ee9fbfd + +PODFILE CHECKSUM: ce552befa68f57b849fe24b017f3db61d5a65e10 + +COCOAPODS: 1.17.0 diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index 1bcbba9..d81a37b 100644 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -21,12 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 13597345A5CA0AE2228D1C3D /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6D6E77DBB1617AA722CA732 /* Pods_RunnerTests.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 59D8C755B7676FAEC403DF1A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67CEDD788E4936C71A0C0003 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,11 +62,13 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 07A035574FD9341A7163E6AC /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1A0B2D79FEFDA189A06CE1BB /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* papyrus_reader_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "papyrus_reader_example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* papyrus_reader_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = papyrus_reader_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -76,8 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 49D12EF61E047B6385236497 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 67CEDD788E4936C71A0C0003 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8013070A816FFEADA059F195 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 992D4367870FCCA4F7089224 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C806DE37B721419A9762609A /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D6D6E77DBB1617AA722CA732 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 13597345A5CA0AE2228D1C3D /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,6 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 59D8C755B7676FAEC403DF1A /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -125,6 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 5EF9122BB5DDB189D2C2E11B /* Pods */, ); sourceTree = ""; }; @@ -172,9 +185,25 @@ path = Runner; sourceTree = ""; }; + 5EF9122BB5DDB189D2C2E11B /* Pods */ = { + isa = PBXGroup; + children = ( + 1A0B2D79FEFDA189A06CE1BB /* Pods-Runner.debug.xcconfig */, + 07A035574FD9341A7163E6AC /* Pods-Runner.release.xcconfig */, + 992D4367870FCCA4F7089224 /* Pods-Runner.profile.xcconfig */, + 49D12EF61E047B6385236497 /* Pods-RunnerTests.debug.xcconfig */, + C806DE37B721419A9762609A /* Pods-RunnerTests.release.xcconfig */, + 8013070A816FFEADA059F195 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 67CEDD788E4936C71A0C0003 /* Pods_Runner.framework */, + D6D6E77DBB1617AA722CA732 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + 486CF6E85D98C787CCA1E5AE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BCC713718085C01E0FE42F8A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + F3A7E6C7CF7D9A8AE455CF78 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -329,6 +361,67 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 486CF6E85D98C787CCA1E5AE /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + BCC713718085C01E0FE42F8A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + F3A7E6C7CF7D9A8AE455CF78 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 49D12EF61E047B6385236497 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C806DE37B721419A9762609A /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 8013070A816FFEADA059F195 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -461,7 +557,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -543,7 +639,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -593,7 +689,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/example/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/example/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/example/macos/Runner/DebugProfile.entitlements b/example/macos/Runner/DebugProfile.entitlements index dddb8a3..0ceee8d 100644 --- a/example/macos/Runner/DebugProfile.entitlements +++ b/example/macos/Runner/DebugProfile.entitlements @@ -8,5 +8,7 @@ com.apple.security.network.server + com.apple.security.files.user-selected.read-only + diff --git a/example/macos/Runner/Release.entitlements b/example/macos/Runner/Release.entitlements index 852fa1a..18aff0c 100644 --- a/example/macos/Runner/Release.entitlements +++ b/example/macos/Runner/Release.entitlements @@ -4,5 +4,7 @@ com.apple.security.app-sandbox + com.apple.security.files.user-selected.read-only + diff --git a/example/pubspec.lock b/example/pubspec.lock index d649998..7da3cfa 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -65,6 +65,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.19.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: f141ea4f277af142a0356955707f6556f37b03947d39d55585981a06ca437bd6 + url: "https://pub.dev" + source: hosted + version: "0.3.5+5" crypto: dependency: transitive description: @@ -113,6 +121,70 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.0" + file_selector: + dependency: "direct main" + description: + name: file_selector + sha256: bd15e43e9268db636b53eeaca9f56324d1622af30e5c34d6e267649758c84d9a + url: "https://pub.dev" + source: hosted + version: "1.1.0" + file_selector_android: + dependency: transitive + description: + name: file_selector_android + sha256: "89243030ea4b3463fb402b44d5eeacc4ccb1c46a88870cb2a5080d693200c1ed" + url: "https://pub.dev" + source: hosted + version: "0.5.2+6" + file_selector_ios: + dependency: transitive + description: + name: file_selector_ios + sha256: "97269e5307a0ab813b1fa2430bada0a96e0afb74848417f8676f64ba5de0051c" + url: "https://pub.dev" + source: hosted + version: "0.5.3+6" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: da76400e7872ce7637ffdce12749ec24169c25f6195c28372208e65a24bcd2ab + url: "https://pub.dev" + source: hosted + version: "0.9.4+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: d57c62362766b5e7ae739448650b66c6aab7a68ba7ecc65e04018652645ae0f4 + url: "https://pub.dev" + source: hosted + version: "0.9.5+1" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" + url: "https://pub.dev" + source: hosted + version: "2.7.0" + file_selector_web: + dependency: transitive + description: + name: file_selector_web + sha256: "73181fbc5257776d8ecaa6a94ab3c8e920ad143b9132a6d984a9271dfc6928d3" + url: "https://pub.dev" + source: hosted + version: "0.9.5" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: fbefc5fb92c6d3cbe8d284a2cd971b593bb07d2cd6da8557b81a862250b4acec + url: "https://pub.dev" + source: hosted + version: "0.9.3+6" flutter: dependency: "direct main" description: flutter @@ -252,10 +324,10 @@ packages: dependency: transitive description: name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" url: "https://pub.dev" source: hosted - version: "0.12.19" + version: "0.12.18" material_color_utilities: dependency: transitive description: @@ -268,10 +340,10 @@ packages: dependency: transitive description: name: meta - sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.17.0" objective_c: dependency: transitive description: @@ -371,18 +443,18 @@ packages: dependency: transitive description: name: pdfrx - sha256: "85a87117ae6358e0ef2cc90d4db9f5e689eabbd7f19ab98c97164584d0be4a4a" + sha256: acce61944c31bd36f0c3031b1bbf41f59d0b0d4e5e27614fbdc74ff093d55464 url: "https://pub.dev" source: hosted - version: "2.4.8" + version: "2.4.7" pdfrx_engine: dependency: transitive description: name: pdfrx_engine - sha256: "4399846809a75aed03881d8b8a19e5e70addd4b46b22fd94a0effd8859258f07" + sha256: "8043527245e4c35a2a3b7df8494c066b9efa97fe031945951e46b378318b3d5f" url: "https://pub.dev" source: hosted - version: "0.4.7" + version: "0.4.5" petitparser: dependency: transitive description: @@ -496,10 +568,10 @@ packages: dependency: transitive description: name: test_api - sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" url: "https://pub.dev" source: hosted - version: "0.7.11" + version: "0.7.9" typed_data: dependency: transitive description: diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 962e47c..9373186 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -28,6 +28,7 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: + file_selector: ^1.1.0 flutter: sdk: flutter @@ -59,6 +60,7 @@ flutter: uses-material-design: true assets: - assets/the_garden_letter.epub + - assets/reading_lab.epub - assets/a_tiny_pdf.pdf # To add assets to your application, add an assets section, like this: diff --git a/example/test/widget_test.dart b/example/test/widget_test.dart index 62c72eb..289a675 100644 --- a/example/test/widget_test.dart +++ b/example/test/widget_test.dart @@ -2,13 +2,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:papyrus_reader/papyrus_reader.dart'; import 'package:papyrus_reader_example/main.dart'; +import 'package:papyrus_reader/src/engine/epub/worker/epub_processor.dart'; +import 'package:papyrus_reader/src/engine/epub/worker/epub_worker.dart'; void main() { testWidgets('chooses a document, changes theme, and reopens the reader', ( tester, ) async { final memory = DemoReaderMemory(); - await tester.pumpWidget(PapyrusReaderDemoApp(memory: memory)); + await tester.pumpWidget( + PapyrusReaderDemoApp(memory: memory, registry: testRegistry()), + ); expect(find.text('Papyrus Reader'), findsOneWidget); expect(find.text('A small library, thoughtfully read.'), findsOneWidget); @@ -68,7 +72,7 @@ void main() { }); testWidgets('opens the bundled PDF reader', (tester) async { - await tester.pumpWidget(const PapyrusReaderDemoApp()); + await tester.pumpWidget(PapyrusReaderDemoApp(registry: testRegistry())); final readPdf = find.widgetWithText(FilledButton, 'Read PDF'); await tester.scrollUntilVisible(readPdf, 300); @@ -79,3 +83,23 @@ void main() { expect(find.byType(PapyrusReader), findsOneWidget); }); } + +ReaderEngineRegistry testRegistry() => ReaderEngineRegistry([ + ReaderEngineRegistration( + formats: const {ReaderFormat.epub}, + factory: () => EpubReaderEngine(workerFactory: () async => _TestWorker()), + ), + ReaderEngineRegistration( + formats: const {ReaderFormat.pdf}, + factory: PdfReaderEngine.new, + ), +]); + +final class _TestWorker implements EpubWorker { + final EpubProcessor processor = EpubProcessor(); + @override + Future> request(String command, Object? argument) => + processor.dispatch(command, argument); + @override + void dispose() {} +} diff --git a/example/windows/flutter/generated_plugin_registrant.cc b/example/windows/flutter/generated_plugin_registrant.cc index 4f78848..043a96f 100644 --- a/example/windows/flutter/generated_plugin_registrant.cc +++ b/example/windows/flutter/generated_plugin_registrant.cc @@ -6,9 +6,12 @@ #include "generated_plugin_registrant.h" +#include #include void RegisterPlugins(flutter::PluginRegistry* registry) { + FileSelectorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FileSelectorWindows")); UrlLauncherWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/example/windows/flutter/generated_plugins.cmake b/example/windows/flutter/generated_plugins.cmake index a962892..4660c63 100644 --- a/example/windows/flutter/generated_plugins.cmake +++ b/example/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + file_selector_windows url_launcher_windows ) diff --git a/lib/papyrus_reader.dart b/lib/papyrus_reader.dart index f966bdd..b7909d8 100644 --- a/lib/papyrus_reader.dart +++ b/lib/papyrus_reader.dart @@ -18,6 +18,7 @@ export 'src/engine/epub/epub_reader_engine.dart'; export 'src/engine/pdf/pdf_facade.dart' show PdfFacade, + DisposablePdfFacade, PdfFacadeError, PdfFacadeException, PdfFacadeFactory, diff --git a/lib/src/controller/reader_controller.dart b/lib/src/controller/reader_controller.dart index ea2b0db..442004b 100644 --- a/lib/src/controller/reader_controller.dart +++ b/lib/src/controller/reader_controller.dart @@ -27,7 +27,7 @@ final class ReaderController extends ChangeNotifier { ReaderEngine? _engine; ReaderSnapshot _snapshot; - Future _loadQueue = Future.value(); + final Set _loadingEngines = {}; int _latestLoadId = 0; bool _isDisposed = false; @@ -53,6 +53,10 @@ final class ReaderController extends ChangeNotifier { ); } + for (final candidate in _loadingEngines.toList()) { + candidate.dispose(); + } + _loadingEngines.clear(); final request = _ReaderLoadRequest( id: ++_latestLoadId, document: document, @@ -67,23 +71,20 @@ final class ReaderController extends ChangeNotifier { ), ); - final operation = _loadQueue.then((_) => _performLoad(request)); - _loadQueue = operation.then( - (_) {}, - onError: (Object _, StackTrace _) {}, - ); - - return operation; + // Give the shell a chance to paint loading chrome. A newer request owns an + // independent engine and never waits for an obsolete file read. + return Future.microtask(() => _performLoad(request)); } Future _performLoad(_ReaderLoadRequest request) async { - if (_isDisposed) { + if (!_canPublish(request)) { return; } ReaderEngine? candidate; try { candidate = _registry.resolve(request.document.format); + _loadingEngines.add(candidate); await candidate.load( request.document, @@ -95,16 +96,20 @@ final class ReaderController extends ChangeNotifier { _selectEngine(candidate); _publish(candidate.snapshot); } else { - candidate.dispose(); + if (_loadingEngines.remove(candidate)) candidate.dispose(); } } on ReaderException catch (error) { - if (candidate != null && !identical(candidate, _engine)) { + if (candidate != null && + _loadingEngines.remove(candidate) && + !identical(candidate, _engine)) { candidate.dispose(); } _publishLoadError(request, error); rethrow; } catch (error, stackTrace) { - if (candidate != null && !identical(candidate, _engine)) { + if (candidate != null && + _loadingEngines.remove(candidate) && + !identical(candidate, _engine)) { candidate.dispose(); } final readerError = ReaderException( @@ -115,6 +120,8 @@ final class ReaderController extends ChangeNotifier { _publishLoadError(request, readerError); Error.throwWithStackTrace(readerError, stackTrace); + } finally { + _loadingEngines.remove(candidate); } } @@ -256,6 +263,10 @@ final class ReaderController extends ChangeNotifier { _isDisposed = true; _latestLoadId++; + for (final candidate in _loadingEngines) { + candidate.dispose(); + } + _loadingEngines.clear(); final engine = _engine; _engine = null; engine?.removeListener(_syncFromEngine); diff --git a/lib/src/domain/reader_locator.dart b/lib/src/domain/reader_locator.dart index 662d873..4a632bd 100644 --- a/lib/src/domain/reader_locator.dart +++ b/lib/src/domain/reader_locator.dart @@ -27,6 +27,8 @@ final class EpubReaderLocator extends ReaderLocator { required int spineIndex, required double localProgression, required double totalProgression, + int? textOffset, + String? anchor, }) { if (cfi.trim().isEmpty) { throw ArgumentError.value(cfi, 'cfi', 'must not be empty'); @@ -40,12 +42,21 @@ final class EpubReaderLocator extends ReaderLocator { } _validateProgressionArgument(localProgression, 'localProgression'); _validateProgressionArgument(totalProgression, 'totalProgression'); + if (textOffset != null && textOffset < 0) { + throw ArgumentError.value( + textOffset, + 'textOffset', + 'must be non-negative', + ); + } return EpubReaderLocator._( cfi: cfi, spineIndex: spineIndex, localProgression: localProgression, totalProgression: totalProgression, + textOffset: textOffset, + anchor: anchor, ); } @@ -54,6 +65,8 @@ final class EpubReaderLocator extends ReaderLocator { required this.spineIndex, required this.localProgression, required this.totalProgression, + this.textOffset, + this.anchor, }); factory EpubReaderLocator._fromJson(Map json) { @@ -68,12 +81,24 @@ final class EpubReaderLocator extends ReaderLocator { 'EPUB locator spineIndex must be a non-negative integer.', ); } + final textOffset = json['textOffset']; + final anchor = json['anchor']; + if (textOffset != null && (textOffset is! int || textOffset < 0)) { + throw const FormatException( + 'EPUB textOffset must be a non-negative integer.', + ); + } + if (anchor != null && anchor is! String) { + throw const FormatException('EPUB anchor must be a string.'); + } return EpubReaderLocator._( cfi: cfi, spineIndex: spineIndex, localProgression: _readProgression(json, 'localProgression'), totalProgression: _readProgression(json, 'totalProgression'), + textOffset: textOffset as int?, + anchor: anchor as String?, ); } @@ -81,6 +106,8 @@ final class EpubReaderLocator extends ReaderLocator { final int spineIndex; final double localProgression; final double totalProgression; + final int? textOffset; + final String? anchor; @override Map toJson() { @@ -97,6 +124,8 @@ final class EpubReaderLocator extends ReaderLocator { 'spineIndex': spineIndex, 'localProgression': localProgression, 'totalProgression': totalProgression, + if (textOffset != null) 'textOffset': textOffset, + if (anchor != null) 'anchor': anchor, }; } @@ -107,11 +136,19 @@ final class EpubReaderLocator extends ReaderLocator { cfi == other.cfi && spineIndex == other.spineIndex && localProgression == other.localProgression && + textOffset == other.textOffset && + anchor == other.anchor && totalProgression == other.totalProgression; @override - int get hashCode => - Object.hash(cfi, spineIndex, localProgression, totalProgression); + int get hashCode => Object.hash( + cfi, + spineIndex, + localProgression, + totalProgression, + textOffset, + anchor, + ); } final class PdfReaderLocator extends ReaderLocator { diff --git a/lib/src/domain/reader_snapshot.dart b/lib/src/domain/reader_snapshot.dart index 068f08c..0c45750 100644 --- a/lib/src/domain/reader_snapshot.dart +++ b/lib/src/domain/reader_snapshot.dart @@ -22,6 +22,8 @@ sealed class ReaderSnapshot { ReaderCapabilities? get capabilities; ReaderException? get error; + + String? get locationLabel => null; } final class ReaderIdleSnapshot extends ReaderSnapshot { @@ -85,11 +87,15 @@ final class ReaderReadySnapshot extends ReaderSnapshot { required this.capabilities, this.locator, List toc = const [], + this.locationLabel, }) : toc = List.unmodifiable(toc); @override ReaderStatus get status => ReaderStatus.ready; + @override + final String? locationLabel; + @override final ReaderDocument document; diff --git a/lib/src/engine/epub/epub_content_renderer.dart b/lib/src/engine/epub/epub_content_renderer.dart index cf87c32..d4271a6 100644 --- a/lib/src/engine/epub/epub_content_renderer.dart +++ b/lib/src/engine/epub/epub_content_renderer.dart @@ -35,6 +35,20 @@ final class FlutterHtmlEpubContentRenderer implements EpubContentRenderer { ), child: Html( data: xhtml, + style: { + 'body': Style( + color: preferences.foregroundColor, + backgroundColor: preferences.backgroundColor, + fontFamily: preferences.fontFamily, + fontSize: FontSize(preferences.fontSize), + lineHeight: LineHeight(preferences.lineHeight), + letterSpacing: preferences.letterSpacing, + margin: Margins.zero, + ), + 'p': Style( + margin: Margins.only(bottom: preferences.paragraphSpacing), + ), + }, shrinkWrap: true, doNotRenderTheseTags: const { 'script', @@ -61,6 +75,7 @@ final class EpubScrollViewport extends StatefulWidget { required this.restorationRevision, required this.renderer, required this.onProgressChanged, + this.controller, }); final String xhtml; @@ -69,6 +84,7 @@ final class EpubScrollViewport extends StatefulWidget { final int restorationRevision; final EpubContentRenderer renderer; final ValueChanged onProgressChanged; + final ScrollController? controller; @override State createState() => _EpubScrollViewportState(); @@ -81,7 +97,7 @@ final class _EpubScrollViewportState extends State { @override void initState() { super.initState(); - _controller = ScrollController(); + _controller = widget.controller ?? ScrollController(); _restoreProgress(); } @@ -133,7 +149,7 @@ final class _EpubScrollViewportState extends State { @override void dispose() { - _controller.dispose(); + if (widget.controller == null) _controller.dispose(); super.dispose(); } diff --git a/lib/src/engine/epub/epub_reader_engine.dart b/lib/src/engine/epub/epub_reader_engine.dart index 38823d9..c5c9d5e 100644 --- a/lib/src/engine/epub/epub_reader_engine.dart +++ b/lib/src/engine/epub/epub_reader_engine.dart @@ -1,10 +1,4 @@ -import 'dart:convert'; -import 'dart:typed_data'; - -import 'package:epub_pro/epub_pro.dart'; import 'package:flutter/widgets.dart'; -import 'package:html/dom.dart' as html_dom; -import 'package:html/parser.dart' as html_parser; import '../../domain/reader_capabilities.dart'; import '../../domain/reader_document.dart'; @@ -17,20 +11,55 @@ import '../../domain/reader_types.dart'; import '../reader_engine.dart'; import 'epub_content_renderer.dart'; import 'epub_paginator.dart'; +import 'epub_rich_layout.dart'; +import 'epub_viewport.dart'; +import 'worker/epub_worker.dart'; + +typedef EpubWorkerFactory = Future Function(); final class EpubReaderEngine extends ReaderEngine { EpubReaderEngine({ - EpubContentRenderer renderer = const FlutterHtmlEpubContentRenderer(), + this.renderer, EpubPaginator? paginator, - }) : _renderer = renderer, - _paginator = paginator ?? EpubPaginator(); + EpubWorkerFactory workerFactory = createEpubWorker, + }) : _paginator = paginator ?? EpubPaginator(), + _workerFactory = workerFactory; - final EpubContentRenderer _renderer; + final EpubContentRenderer? renderer; final EpubPaginator _paginator; + final EpubWorkerFactory _workerFactory; + EpubWorker? _worker; + EpubWorker? _openingWorker; + ReaderDocument? _document; + ReaderPreferences _preferences = const ReaderPreferences(); + EpubReaderLocator? _locator; + String _currentChapterHtml = ''; + List _toc = const []; + List _blocks = const []; + Map _anchors = const {}; + int _chapterCount = 0; + int _contentLength = 0; + int _restorationRevision = 0; + int _contentRevision = 0; + int _navigationGeneration = 0; + bool _disposed = false; + int _visiblePage = 1; + int _pageCount = 0; + + /// The mounted viewport handles local page/scroll turns. The engine crosses + /// the spine only when that viewport reports a boundary. + Future Function(int direction)? moveWithinChapter; + + String get currentChapterHtml => _currentChapterHtml; + List get blocks => _blocks; + int get restorationRevision => _restorationRevision; + int get contentRevision => _contentRevision; + int get contentLength => _contentLength; + EpubReaderLocator get locator => _locator!; + ReaderPreferences get preferences => _preferences; @override Set get supportedFormats => const {ReaderFormat.epub}; - @override ReaderCapabilities get capabilities => const ReaderCapabilities( supportsPagination: true, @@ -38,341 +67,168 @@ final class EpubReaderEngine extends ReaderEngine { supportsTextCustomization: true, supportsColumnMode: true, ); - @override ReaderSnapshot snapshot = const ReaderIdleSnapshot(); - EpubBookRef? _book; - List _spine = const []; - ReaderDocument? _document; - ReaderPreferences _preferences = const ReaderPreferences(); - EpubReaderLocator? _locator; - String _currentChapterHtml = ''; - List _toc = const []; - int _restorationRevision = 0; - - String get currentChapterHtml => _currentChapterHtml; - @override Future load( ReaderDocument document, { ReaderLocator? initialLocator, required ReaderPreferences preferences, }) async { - if (document.format != ReaderFormat.epub) { - throw const ReaderException( - ReaderErrorCode.invalidDocument, - 'The EPUB engine can only load EPUB documents.', - ); - } - if (initialLocator != null && initialLocator is! EpubReaderLocator) { + if (document.format != ReaderFormat.epub || + (initialLocator != null && initialLocator is! EpubReaderLocator)) { throw const ReaderException( ReaderErrorCode.invalidDocument, - 'The initial locator is not an EPUB locator.', + 'The EPUB document or initial locator has the wrong format.', ); } - + final generation = ++_navigationGeneration; + EpubWorker? candidate; try { - final Uint8List bytes = await document.loadBytes(); - final book = await EpubReader.openBook(bytes); - _rejectFixedLayout(book); - final chapters = book.getChapters(); - final spine = _flattenSpine(chapters); - if (spine.isEmpty) { - throw const FormatException('The EPUB has no readable spine items.'); - } - + final bytes = await document.loadBytes(); + _requireCurrent(generation); + candidate = await _workerFactory(); + _requireCurrent(generation); + _openingWorker = candidate; + final metadata = await candidate.open(bytes); + _requireCurrent(generation); + final count = metadata['count'] as int; final restored = initialLocator as EpubReaderLocator?; - if (restored != null && restored.spineIndex >= spine.length) { + if (restored != null && restored.spineIndex >= count) { throw const ReaderException( ReaderErrorCode.invalidDocument, 'The EPUB locator is outside the document spine.', ); } - - final locator = restored ?? _locatorFor(0, spine); - final toc = _buildToc(chapters, spine); - final chapterHtml = await _readChapterFrom( - book, - spine[locator.spineIndex], - ); - - _book = book; - _spine = spine; + final target = restored ?? _locatorFor(0, count: count); + final chapter = await candidate.chapter(target.spineIndex); + _requireCurrent(generation); + final old = _worker; + _worker = candidate; + _openingWorker = null; + old?.dispose(); _document = document; _preferences = preferences; - _locator = locator; - _toc = toc; - _currentChapterHtml = chapterHtml; - _paginator.clear(); - _restorationRevision++; + _chapterCount = count; + _toc = [ + for (final entry in metadata['toc'] as List) + _tocEntry(Map.from(entry as Map), count), + ]; + _setChapter(chapter, target); _publish(); } on ReaderException { + if (!identical(candidate, _worker)) candidate?.dispose(); rethrow; } catch (error) { + if (!identical(candidate, _worker)) candidate?.dispose(); throw ReaderException( ReaderErrorCode.invalidDocument, 'The EPUB document is invalid or malformed.', cause: error, ); + } finally { + if (identical(candidate, _openingWorker)) _openingWorker = null; } } - void _rejectFixedLayout(EpubBookRef book) { - final metadata = book.schema?.package?.metadata; - final fixed = metadata?.metaItems.any( - (item) => - (item.property == 'rendition:layout' || - item.name == 'rendition:layout') && - (item.content == 'pre-paginated' || - item.attributes['content'] == 'pre-paginated'), + ReaderTocEntry _tocEntry(Map entry, int count) { + final index = entry['index'] as int; + return ReaderTocEntry( + title: entry['title'] as String, + locator: _locatorFor( + index, + count: count, + anchor: entry['anchor'] as String?, + ), + children: [ + for (final child in entry['children'] as List) + _tocEntry(Map.from(child as Map), count), + ], ); - if (fixed ?? false) { - throw const ReaderException( - ReaderErrorCode.unsupportedFixedLayout, - 'Fixed-layout EPUB documents are not supported.', - ); - } - } - - List _flattenSpine(List chapters) { - final result = []; - final paths = {}; - - void visit(EpubChapterRef chapter) { - final path = chapter.contentFileName?.split('#').first; - if (path != null && paths.add(path)) { - result.add(chapter); - } - for (final child in chapter.subChapters) { - visit(child); - } - } - - for (final chapter in chapters) { - visit(chapter); - } - return result; } - List _buildToc( - List chapters, - List spine, - ) { - ReaderTocEntry convert(EpubChapterRef chapter) { - final target = chapter.contentFileName?.split('#').first; - final index = spine.indexWhere( - (item) => item.contentFileName?.split('#').first == target, - ); - return ReaderTocEntry( - title: chapter.title?.trim().isNotEmpty == true - ? chapter.title!.trim() - : 'Chapter', - locator: _locatorFor(index < 0 ? 0 : index, spine), - children: chapter.subChapters.map(convert).toList(), - ); - } - - return chapters.map(convert).toList(); - } - - Future _readChapter(int index) async { - return _readChapterFrom(_book!, _spine[index]); - } - - Future _readChapterFrom( - EpubBookRef book, - EpubChapterRef chapter, - ) async { - final raw = await chapter.readHtmlContent(); - - return _sanitize(raw, chapter, book); - } - - Future _sanitize( - String raw, - EpubChapterRef chapter, - EpubBookRef book, - ) async { - final document = html_parser.parse(raw); - const blockedTags = { - 'script', - 'form', - 'iframe', - 'object', - 'embed', - 'input', - 'button', - 'link', - 'style', - 'video', - 'audio', - 'source', - 'track', - 'use', - }; - for (final tag in blockedTags) { - for (final element in document.querySelectorAll(tag).toList()) { - element.remove(); - } - } - - for (final element in document.querySelectorAll('*').toList()) { - _sanitizeAttributes(element); - if (element.localName != 'img') { - continue; - } - - final source = element.attributes['src']?.trim(); - final uri = source == null ? null : Uri.tryParse(source); - if (source == null || - source.isEmpty || - source.startsWith('//') || - uri == null || - uri.hasScheme) { - element.remove(); - continue; - } - - final resolved = _resolvePath( - chapter.contentFileName ?? '', - Uri.decodeComponent(uri.path), - ); - final image = book.content?.images.entries - .where((entry) => _normalized(entry.key) == _normalized(resolved)) - .map((entry) => entry.value) - .firstOrNull; - if (image == null) { - element.remove(); - continue; - } - - final bytes = await image.readContent(); - final mime = image.contentMimeType ?? 'application/octet-stream'; - if (!mime.toLowerCase().startsWith('image/')) { - element.remove(); - continue; - } - element.attributes['src'] = 'data:$mime;base64,${base64Encode(bytes)}'; - } - return document.outerHtml; - } - - void _sanitizeAttributes(html_dom.Element element) { - for (final name in element.attributes.keys.toList()) { - final normalizedName = name.toString().toLowerCase(); - if (normalizedName.startsWith('on') || normalizedName == 'srcset') { - element.attributes.remove(name); - } - } - - final style = element.attributes['style']; - if (style != null) { - final declarations = style - .split(';') - .map((declaration) => declaration.trim()) - .where( - (declaration) => - declaration.isNotEmpty && - !RegExp( - r'(?:url\s*\(|@import|expression\s*\()', - caseSensitive: false, - ).hasMatch(declaration), - ) - .toList(); - if (declarations.isEmpty) { - element.attributes.remove('style'); - } else { - element.attributes['style'] = declarations.join('; '); - } - } - - for (final attribute in const ['poster', 'background']) { - element.attributes.remove(attribute); - } - if (element.localName != 'img') { - element.attributes.remove('src'); - } - - final href = element.attributes['href']; - if (href == null) { - return; - } - if (element.localName != 'a' || !_isSafeLink(href)) { - element.attributes.remove('href'); - } - } - - bool _isSafeLink(String href) { - final normalized = href - .replaceAll(RegExp(r'[\u0000-\u0020]+'), '') - .toLowerCase(); - return !normalized.startsWith('javascript:') && - !normalized.startsWith('data:') && - !normalized.startsWith('vbscript:') && - !normalized.startsWith('file:'); - } - - String _resolvePath(String chapterPath, String relative) { - final parts = chapterPath.split('/')..removeLast(); - for (final part in relative.split('/')) { - if (part == '..') { - if (parts.isNotEmpty) { - parts.removeLast(); - } - } else if (part != '.' && part.isNotEmpty) { - parts.add(part); - } - } - return parts.join('/'); - } - - String _normalized(String path) => - path.replaceFirst(RegExp(r'^OEBPS/'), '').replaceFirst(RegExp(r'^/'), ''); - EpubReaderLocator _locatorFor( - int index, [ - List? candidateSpine, - ]) { - final spine = candidateSpine ?? _spine; - + int index, { + int? count, + double local = 0, + int? textOffset, + String? anchor, + }) { return EpubReaderLocator( - cfi: 'epubcfi(/6/${(index + 1) * 2}!/4/1:0)', + cfi: 'epubcfi(/6/${(index + 1) * 2}!/4/1:${textOffset ?? 0})', spineIndex: index, - localProgression: 0, - totalProgression: _totalProgression(index, 0, spineCount: spine.length), + localProgression: local, + totalProgression: ((index + local) / (count ?? _chapterCount)).clamp( + 0, + 1, + ), + textOffset: textOffset, + anchor: anchor, ); } - double _totalProgression( - int spineIndex, - double localProgression, { - int? spineCount, - }) { - final count = spineCount ?? _spine.length; - if (count == 0) { - return 0; - } + void _setChapter(Map chapter, EpubReaderLocator target) { + _currentChapterHtml = chapter['html'] as String; + _blocks = [ + for (final block in chapter['blocks'] as List) + EpubContentBlock(Map.from(block as Map)), + ]; + _anchors = (chapter['anchors'] as Map).cast(); + _contentLength = chapter['length'] as int; + final offset = target.anchor == null + ? target.textOffset + : _anchors[target.anchor] ?? target.textOffset; + _locator = offset == null + ? target + : _locatorFor( + target.spineIndex, + local: target.localProgression, + textOffset: offset.clamp(0, _contentLength), + ); + _paginator.clear(); + _contentRevision++; + _pageCount = 0; + _restorationRevision++; + } - return ((spineIndex + localProgression) / count).clamp(0, 1); + void _requireCurrent(int generation) { + if (_disposed || generation != _navigationGeneration) { + throw const ReaderException( + ReaderErrorCode.engineUnavailable, + 'The document was closed or replaced.', + ); + } } @override Future goTo(ReaderLocator locator) async { if (locator is! EpubReaderLocator || - locator.spineIndex >= _spine.length || - _document == null) { + locator.spineIndex >= _chapterCount || + _worker == null) { throw const ReaderException( ReaderErrorCode.invalidDocument, 'The locator is not valid for the current EPUB.', ); } - final chapterHtml = await _readChapter(locator.spineIndex); - - _locator = locator; - _currentChapterHtml = chapterHtml; - _paginator.clear(); - _restorationRevision++; + final generation = ++_navigationGeneration; + if (locator.spineIndex == _locator?.spineIndex) { + final offset = locator.anchor == null + ? locator.textOffset + : _anchors[locator.anchor] ?? locator.textOffset; + _locator = offset == null + ? locator + : _locatorFor( + locator.spineIndex, + local: locator.localProgression, + textOffset: offset.clamp(0, _contentLength), + ); + _restorationRevision++; + } else { + final chapter = await _worker!.chapter(locator.spineIndex); + _requireCurrent(generation); + _setChapter(chapter, locator); + } _publish(); } @@ -385,56 +241,67 @@ final class EpubReaderEngine extends ReaderEngine { 'must be between 0 and 1', ); } - if (_document == null || _spine.isEmpty) { + if (_worker == null) { throw const ReaderException( ReaderErrorCode.engineUnavailable, 'No EPUB document is loaded.', ); } - - final scaledProgress = progress * _spine.length; - final spineIndex = progress == 1 - ? _spine.length - 1 - : scaledProgress.floor(); - final localProgression = progress == 1 ? 1.0 : scaledProgress - spineIndex; - final locator = EpubReaderLocator( - cfi: - 'epubcfi(/6/${(spineIndex + 1) * 2}!/4/1:${(localProgression * 1000000).round()})', - spineIndex: spineIndex, - localProgression: localProgression, - totalProgression: progress, - ); - - await goTo(locator); + final scaled = progress * _chapterCount; + final index = progress == 1 ? _chapterCount - 1 : scaled.floor(); + await goTo(_locatorFor(index, local: progress == 1 ? 1 : scaled - index)); } @override Future goNext() => _move(1); - @override Future goPrevious() => _move(-1); - - Future _move(int delta) async { - final current = _locator; - if (current == null) { + Future _move(int direction) async { + if (_locator == null) { throw const ReaderException( ReaderErrorCode.engineUnavailable, 'No EPUB document is loaded.', ); } - final next = current.spineIndex + delta; - if (next < 0 || next >= _spine.length) { + if (await moveWithinChapter?.call(direction) ?? false) return; + final index = _locator!.spineIndex + direction; + if (index < 0 || index >= _chapterCount) { throw const ReaderException( ReaderErrorCode.navigationBoundary, - 'There is no chapter in that direction.', + 'There is no page in that direction.', ); } - await goTo(_locatorFor(next)); + await goTo(_locatorFor(index, local: direction < 0 ? 1 : 0)); + } + + void viewportPositionChanged( + double local, { + int? textOffset, + int? pageNumber, + }) { + if (_disposed || _locator == null) return; + final next = _locatorFor( + _locator!.spineIndex, + local: local.clamp(0, 1), + textOffset: textOffset, + ); + if (pageNumber != null) _visiblePage = pageNumber; + if (next == _locator) return; + _locator = next; + _publish(); + } + + void viewportPaginationChanged(int count, int visiblePage) { + if (_disposed || (_pageCount == count && _visiblePage == visiblePage)) { + return; + } + _pageCount = count; + _visiblePage = visiblePage; + _publish(); } @override Future currentLocator() async => _locator; - @override Future updatePreferences(ReaderPreferences preferences) async { if (_document == null) { @@ -443,18 +310,23 @@ final class EpubReaderEngine extends ReaderEngine { 'No EPUB document is loaded.', ); } + if (_preferences == preferences) return; _preferences = preferences; _restorationRevision++; _publish(); } void _publish() { + if (_disposed) return; snapshot = ReaderReadySnapshot( document: _document!, preferences: _preferences, capabilities: capabilities, locator: _locator, toc: _toc, + locationLabel: + 'Chapter ${_locator!.spineIndex + 1} of $_chapterCount' + '${_pageCount > 0 ? ' · Page $_visiblePage of $_pageCount' : ''}', ); notifyListeners(); } @@ -467,286 +339,19 @@ final class EpubReaderEngine extends ReaderEngine { 'The EPUB viewport is not ready.', ); } - if (_preferences.layoutMode == ReaderLayoutMode.scroll) { - return EpubScrollViewport( - xhtml: _currentChapterHtml, - preferences: _preferences, - localProgression: _locator!.localProgression, - restorationRevision: _restorationRevision, - renderer: _renderer, - onProgressChanged: _scrollProgressChanged, - ); - } - - final blocks = _textBlocks(_currentChapterHtml); - return LayoutBuilder( - builder: (context, constraints) { - final viewport = Size( - constraints.maxWidth.isFinite ? constraints.maxWidth : 600, - constraints.maxHeight.isFinite ? constraints.maxHeight : 800, - ); - final pages = _paginator.paginate( - blocks, - viewport: viewport, - preferences: _preferences, - ); - return _PaginatedEpubViewport( - pages: pages, - preferences: _preferences, - locator: _locator!, - onPageChanged: (pageIndex) { - _paginatedPageChanged(pageIndex, pages.length); - }, - ); - }, - ); - } - - void _scrollProgressChanged(double localProgression) { - final current = _locator; - if (current == null) { - return; - } - _locator = EpubReaderLocator( - cfi: - 'epubcfi(/6/${(current.spineIndex + 1) * 2}!/4/1:${(localProgression * 1000000).round()})', - spineIndex: current.spineIndex, - localProgression: localProgression, - totalProgression: _totalProgression(current.spineIndex, localProgression), - ); - _publish(); - } - - void _paginatedPageChanged(int pageIndex, int pageCount) { - final current = _locator; - if (current == null || pageCount <= 1) { - return; - } - final localProgression = pageIndex / (pageCount - 1); - _locator = EpubReaderLocator( - cfi: 'epubcfi(/6/${(current.spineIndex + 1) * 2}!/4/1:$pageIndex)', - spineIndex: current.spineIndex, - localProgression: localProgression, - totalProgression: _totalProgression(current.spineIndex, localProgression), - ); - _publish(); - } - - List _textBlocks(String html) { - final document = html_parser.parse(html); - final body = document.body; - if (body == null) { - return const []; - } - - return _EpubTextBlockCollector().collect(body); - } -} - -final class _EpubTextBlockCollector { - static const _lineBreak = '\u0000'; - static const _blockTags = { - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'p', - 'li', - 'blockquote', - 'pre', - 'div', - 'td', - 'th', - }; - - final List _blocks = []; - - List collect(html_dom.Element root) { - final buffer = StringBuffer(); - _visitChildren(root, buffer); - _flush(buffer); - - return List.unmodifiable(_blocks); - } - - void _visitChildren(html_dom.Node parent, StringBuffer buffer) { - for (final node in parent.nodes) { - if (node is html_dom.Text) { - buffer.write(node.data); - continue; - } - if (node is! html_dom.Element) { - continue; - } - - final tag = node.localName; - if (tag == 'br') { - buffer.write(_lineBreak); - } else if (_blockTags.contains(tag)) { - _flush(buffer); - _visitBlock(node); - } else { - _visitChildren(node, buffer); - } - } - } - - void _visitBlock(html_dom.Element element) { - if (element.localName == 'pre') { - final buffer = StringBuffer(); - _visitPreformatted(element, buffer); - _add(_normalizePreformatted(buffer.toString())); - return; - } - - final buffer = StringBuffer(); - _visitChildren(element, buffer); - _flush(buffer); - } - - void _visitPreformatted(html_dom.Node parent, StringBuffer buffer) { - for (final node in parent.nodes) { - if (node is html_dom.Text) { - buffer.write(node.data); - } else if (node is html_dom.Element && node.localName == 'br') { - buffer.write('\n'); - } else if (node is html_dom.Element) { - _visitPreformatted(node, buffer); - } - } - } - - void _flush(StringBuffer buffer) { - _add(_normalize(buffer.toString())); - buffer.clear(); - } - - void _add(String value) { - if (value.isNotEmpty) { - _blocks.add(value); - } - } - - String _normalize(String value) { - final lines = value - .split(_lineBreak) - .map((line) => line.replaceAll(RegExp(r'\s+'), ' ').trim()) - .toList(); - while (lines.isNotEmpty && lines.first.isEmpty) { - lines.removeAt(0); - } - while (lines.isNotEmpty && lines.last.isEmpty) { - lines.removeLast(); - } - - return lines.join('\n'); - } - - String _normalizePreformatted(String value) { - return value.replaceAll('\r\n', '\n').replaceAll('\r', '\n').trim(); - } -} - -final class _PaginatedEpubViewport extends StatefulWidget { - const _PaginatedEpubViewport({ - required this.pages, - required this.preferences, - required this.locator, - required this.onPageChanged, - }); - - final List> pages; - final ReaderPreferences preferences; - final EpubReaderLocator locator; - final ValueChanged onPageChanged; - - @override - State<_PaginatedEpubViewport> createState() => _PaginatedEpubViewportState(); -} - -final class _PaginatedEpubViewportState extends State<_PaginatedEpubViewport> { - late PageController _controller; - - int get _targetPage => - ((widget.pages.length - 1) * widget.locator.localProgression) - .round() - .clamp(0, widget.pages.length - 1); - - @override - void initState() { - super.initState(); - _controller = PageController(initialPage: _targetPage); - } - - @override - void didUpdateWidget(covariant _PaginatedEpubViewport oldWidget) { - super.didUpdateWidget(oldWidget); - final oldTarget = - ((oldWidget.pages.length - 1) * oldWidget.locator.localProgression) - .round() - .clamp(0, oldWidget.pages.length - 1); - if (oldTarget == _targetPage && - oldWidget.locator.spineIndex == widget.locator.spineIndex && - oldWidget.preferences == widget.preferences) { - return; - } - WidgetsBinding.instance.addPostFrameCallback((_) { - if (mounted && _controller.hasClients) { - _controller.jumpToPage(_targetPage); - } - }); + return EpubViewport(engine: this); } @override void dispose() { - _controller.dispose(); + if (_disposed) return; + _disposed = true; + _navigationGeneration++; + _openingWorker?.dispose(); + _worker?.dispose(); + _worker = null; + _openingWorker = null; + moveWithinChapter = null; super.dispose(); } - - @override - Widget build(BuildContext context) { - return ColoredBox( - color: widget.preferences.backgroundColor, - child: PageView( - controller: _controller, - onPageChanged: widget.onPageChanged, - children: [ - for (final page in widget.pages) - Padding( - padding: widget.preferences.pageMargins, - child: ListView( - physics: const NeverScrollableScrollPhysics(), - children: [ - for (final block in page) - Padding( - padding: EdgeInsets.only( - bottom: widget.preferences.paragraphSpacing, - ), - child: Text( - block, - style: TextStyle( - color: widget.preferences.foregroundColor, - fontFamily: widget.preferences.fontFamily, - fontSize: widget.preferences.fontSize, - height: widget.preferences.lineHeight, - letterSpacing: widget.preferences.letterSpacing, - ), - ), - ), - ], - ), - ), - ], - ), - ); - } -} - -extension on Iterable { - T? get firstOrNull { - final iterator = this.iterator; - return iterator.moveNext() ? iterator.current : null; - } } diff --git a/lib/src/engine/epub/epub_rich_layout.dart b/lib/src/engine/epub/epub_rich_layout.dart new file mode 100644 index 0000000..46a2232 --- /dev/null +++ b/lib/src/engine/epub/epub_rich_layout.dart @@ -0,0 +1,217 @@ +import 'dart:math' as math; +import 'dart:typed_data'; + +import 'package:flutter/widgets.dart'; + +import '../../domain/reader_preferences.dart'; + +final class EpubContentBlock { + EpubContentBlock(Map json) + : kind = json['kind'] as String, + offset = json['offset'] as int, + length = json['length'] as int, + paragraphEnd = json['paragraphEnd'] as bool? ?? true, + runs = [ + for (final run in json['runs'] as List? ?? const []) + Map.from(run as Map), + ], + image = json['src'] == null + ? null + : UriData.parse(json['src'] as String).contentAsBytes(), + imageLabel = json['alt'] as String? ?? 'Illustration', + aspect = (json['aspect'] as num?)?.toDouble() ?? 1.5; + + final String kind; + final int offset; + final int length; + final bool paragraphEnd; + final List> runs; + final Uint8List? image; + final String imageLabel; + final double aspect; + + TextStyle style(ReaderPreferences preferences) { + final heading = kind.startsWith('h') + ? int.tryParse(kind.substring(1)) + : null; + return TextStyle( + inherit: false, + color: preferences.foregroundColor, + fontFamily: kind == 'pre' ? 'monospace' : preferences.fontFamily, + fontSize: + preferences.fontSize * + (heading == null ? 1 : math.max(1.1, 1.8 - heading * .12)), + fontWeight: heading == null ? FontWeight.normal : FontWeight.w600, + fontStyle: kind == 'blockquote' ? FontStyle.italic : FontStyle.normal, + height: preferences.lineHeight, + letterSpacing: preferences.letterSpacing, + ); + } + + TextSpan span(ReaderPreferences preferences, {int start = 0, int? end}) { + final children = []; + var position = 0; + for (final run in runs) { + final text = run['text'] as String; + final from = math.max(0, start - position); + final to = math.min(text.length, (end ?? length) - position); + if (to > from) { + children.add( + TextSpan( + text: text.substring(from, to), + style: TextStyle( + fontWeight: run['bold'] == true ? FontWeight.bold : null, + fontStyle: run['italic'] == true ? FontStyle.italic : null, + fontFamily: run['code'] == true ? 'monospace' : null, + decoration: TextDecoration.combine([ + if (run['underline'] == true) TextDecoration.underline, + if (run['strike'] == true) TextDecoration.lineThrough, + ]), + ), + ), + ); + } + position += text.length; + } + return TextSpan(style: style(preferences), children: children); + } +} + +final class EpubPageFragment { + const EpubPageFragment(this.block, this.start, this.end, this.height); + final EpubContentBlock block; + final int start; + final int end; + final double height; + int get offset => block.offset + start; + double spacing(ReaderPreferences preferences) => + block.paragraphEnd && end == block.length + ? preferences.paragraphSpacing + : 0; +} + +final class EpubRichPage { + const EpubRichPage(this.fragments); + final List fragments; + int get offset => fragments.isEmpty ? 0 : fragments.first.offset; +} + +/// Measures each paragraph once and cuts at actual line boundaries. Long +/// paragraphs never trigger repeated binary-search layouts or surrogate splits. +Future> layoutEpubChapter( + List blocks, { + required Size contentSize, + required ReaderPreferences preferences, + required TextScaler textScaler, + required TextDirection direction, + required bool Function() cancelled, +}) async { + final width = math.max(1.0, contentSize.width); + final height = math.max(1.0, contentSize.height); + final pages = []; + var fragments = []; + var used = 0.0; + final stopwatch = Stopwatch()..start(); + void finish() { + if (fragments.isEmpty) return; + pages.add(EpubRichPage(List.unmodifiable(fragments))); + fragments = []; + used = 0; + } + + for (final block in blocks) { + if (cancelled()) return const []; + final spacing = block.paragraphEnd ? preferences.paragraphSpacing : 0.0; + if (block.image != null) { + final imageHeight = math.min(width / block.aspect, height * .65); + if (used + imageHeight + spacing > height) finish(); + fragments.add(EpubPageFragment(block, 0, 1, imageHeight)); + used += imageHeight + spacing; + } else { + final span = block.span(preferences); + final painter = TextPainter( + text: span, + textDirection: direction, + textScaler: textScaler, + )..layout(maxWidth: width); + final lines = painter.computeLineMetrics(); + final text = span.toPlainText(); + var start = 0; + var segmentHeight = 0.0; + for (var lineIndex = 0; lineIndex < lines.length; lineIndex++) { + final line = lines[lineIndex]; + final top = line.baseline - line.ascent; + final bottom = line.baseline + line.descent; + // Ascent/descent exclude part of the line-height leading on Skia fonts. + // Count the complete line box so several paragraphs cannot overfill a + // page even when the glyph bounds are shorter than their line boxes. + final lineHeight = line.height; + if (used + segmentHeight + lineHeight + spacing > height && + (used > 0 || segmentHeight > 0)) { + final position = painter.getPositionForOffset( + Offset(line.left + line.width / 2, (top + bottom) / 2), + ); + // Query inside the line: x=0 can resolve to the previous line's end + // on Skia, even when the y coordinate belongs to the following line. + final boundary = painter + .getLineBoundary( + TextPosition( + offset: position.offset, + affinity: TextAffinity.downstream, + ), + ) + .start; + if (boundary > start) { + fragments.add( + EpubPageFragment(block, start, boundary, segmentHeight), + ); + start = boundary; + } + finish(); + segmentHeight = 0; + } + segmentHeight += lineHeight; + } + if (start < text.length) { + fragments.add( + EpubPageFragment(block, start, text.length, segmentHeight), + ); + used += segmentHeight + spacing; + } + painter.dispose(); + } + if (stopwatch.elapsedMilliseconds >= 4) { + await Future.delayed(Duration.zero); + stopwatch.reset(); + } + } + finish(); + if (pages.isEmpty) pages.add(const EpubRichPage([])); + return List.unmodifiable(pages); +} + +Widget buildEpubFragment( + EpubPageFragment fragment, + ReaderPreferences preferences, +) { + final block = fragment.block; + if (block.image != null) { + return SizedBox( + height: fragment.height, + child: Image.memory( + block.image!, + fit: BoxFit.contain, + semanticLabel: block.imageLabel, + errorBuilder: (_, _, _) => Center( + child: Text( + block.imageLabel, + style: TextStyle(color: preferences.foregroundColor), + ), + ), + ), + ); + } + return Text.rich( + block.span(preferences, start: fragment.start, end: fragment.end), + ); +} diff --git a/lib/src/engine/epub/epub_viewport.dart b/lib/src/engine/epub/epub_viewport.dart new file mode 100644 index 0000000..c6a2c5c --- /dev/null +++ b/lib/src/engine/epub/epub_viewport.dart @@ -0,0 +1,477 @@ +import 'dart:async'; +import 'dart:math' as math; + +import 'package:flutter/material.dart'; + +import '../../domain/reader_types.dart'; +import 'epub_reader_engine.dart'; +import 'epub_rich_layout.dart'; +import 'epub_content_renderer.dart'; + +final class EpubViewport extends StatefulWidget { + const EpubViewport({required this.engine, super.key}); + final EpubReaderEngine engine; + @override + State createState() => _EpubViewportState(); +} + +final class _EpubViewportState extends State { + final PageController _pagesController = PageController(); + final ScrollController _scrollController = ScrollController(); + Future>? _layout; + List _pages = const []; + Object? _layoutKey; + int _layoutGeneration = 0; + int _restoration = -1; + int _pageIndex = 0; + int _columns = 1; + double _drag = 0; + int _startPage = 0; + double _startScroll = 0; + bool _restoring = false; + bool _busy = false; + Completer? _layoutReady; + List _scrollOffsets = const []; + + @override + void initState() { + super.initState(); + widget.engine.addListener(_changed); + widget.engine.moveWithinChapter = _move; + _scrollController.addListener(_scrollChanged); + PaintingBinding.instance.systemFonts.addListener(_fontsChanged); + } + + void _fontsChanged() { + if (!mounted) return; + setState(() => _layoutKey = null); + } + + @override + void didUpdateWidget(covariant EpubViewport oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.engine != widget.engine) { + oldWidget.engine.removeListener(_changed); + oldWidget.engine.moveWithinChapter = null; + widget.engine.addListener(_changed); + widget.engine.moveWithinChapter = _move; + _layoutKey = null; + } + } + + void _changed() { + if (mounted && _restoration != widget.engine.restorationRevision) { + setState(() {}); + } + } + + int _target(List pages) { + final locator = widget.engine.locator; + final offset = locator.textOffset; + if (offset != null) { + for (var i = pages.length - 1; i >= 0; i--) { + if (pages[i].offset <= offset) return i; + } + return 0; + } + return ((pages.length - 1) * locator.localProgression).round().clamp( + 0, + pages.length - 1, + ); + } + + void _restore(List pages, double width) { + _pages = pages; + if (_restoration == widget.engine.restorationRevision) return; + _restoration = widget.engine.restorationRevision; + final target = _target(pages); + _pageIndex = target ~/ _columns; + WidgetsBinding.instance.addPostFrameCallback((_) { + if (!mounted || !identical(_pages, pages)) return; + _restoring = true; + if (widget.engine.preferences.layoutMode == ReaderLayoutMode.paginated) { + if (_pagesController.hasClients) { + _pagesController.jumpToPage(_pageIndex); + } + } else if (_scrollController.hasClients && _scrollOffsets.isNotEmpty) { + var pixels = _scrollOffsets[target]; + final offset = widget.engine.locator.textOffset; + if (offset != null) { + pixels += widget.engine.preferences.pageMargins.top; + for (final fragment in pages[target].fragments) { + if (fragment.offset >= offset || + fragment.block.offset + fragment.end > offset) { + break; + } + pixels += + fragment.height + fragment.spacing(widget.engine.preferences); + } + } else { + pixels = + _scrollController.position.maxScrollExtent * + widget.engine.locator.localProgression; + } + _scrollController.jumpTo( + pixels.clamp(0, _scrollController.position.maxScrollExtent), + ); + } + _restoring = false; + _busy = false; + if (_layoutReady?.isCompleted == false) _layoutReady!.complete(); + widget.engine.viewportPaginationChanged(pages.length, target + 1); + }); + } + + Future _move(int direction) async { + while (_busy && mounted) { + final ready = _layoutReady; + if (ready == null) return true; + await ready.future; + } + if (!mounted || (_pages.isEmpty && widget.engine.renderer == null)) { + return true; + } + if (widget.engine.preferences.layoutMode == ReaderLayoutMode.scroll) { + if (!_scrollController.hasClients) return true; + final position = _scrollController.position; + final next = + (position.pixels + direction * position.viewportDimension * .85) + .clamp(0.0, position.maxScrollExtent); + if ((next - position.pixels).abs() < 1) return false; + _scrollController.jumpTo(next); + return true; + } + final count = (_pages.length / _columns).ceil(); + final next = _pageIndex + direction; + if (next < 0 || next >= count) return false; + _pageIndex = next; + if (_pagesController.hasClients) _pagesController.jumpToPage(next); + _publishPage(next); + return true; + } + + void _publishPage(int index) { + if (_restoring || _pages.isEmpty) return; + _pageIndex = index; + final page = (index * _columns).clamp(0, _pages.length - 1); + widget.engine.viewportPositionChanged( + _pages.length <= _columns ? 0 : page / (_pages.length - _columns), + textOffset: _pages[page].offset, + pageNumber: page + 1, + ); + } + + void _scrollChanged() { + if (_restoring || !_scrollController.hasClients || _pages.isEmpty) return; + final pixels = _scrollController.position.pixels; + var index = 0; + for (var i = 1; i < _scrollOffsets.length; i++) { + if (_scrollOffsets[i] > pixels) break; + index = i; + } + var offset = _pages[index].offset; + var within = + pixels - + _scrollOffsets[index] - + widget.engine.preferences.pageMargins.top; + for (final fragment in _pages[index].fragments) { + if (within < 0) break; + offset = fragment.offset; + within -= fragment.height + fragment.spacing(widget.engine.preferences); + } + final max = _scrollController.position.maxScrollExtent; + widget.engine.viewportPositionChanged( + max <= 0 ? 0 : (pixels / max).clamp(0, 1), + textOffset: offset, + pageNumber: index + 1, + ); + } + + void _beyondChapter(int direction) { + unawaited( + (direction > 0 ? widget.engine.goNext() : widget.engine.goPrevious()) + .catchError((Object error, StackTrace stack) { + // At the book boundary the viewport remains in place. Other errors + // are visible without destroying the readable current chapter. + if (mounted && !error.toString().contains('navigationBoundary')) { + ScaffoldMessenger.maybeOf( + context, + )?.showSnackBar(SnackBar(content: Text(error.toString()))); + } + }), + ); + } + + @override + void dispose() { + _layoutGeneration++; + if (_layoutReady?.isCompleted == false) _layoutReady!.complete(); + widget.engine.removeListener(_changed); + PaintingBinding.instance.systemFonts.removeListener(_fontsChanged); + widget.engine.moveWithinChapter = null; + _pagesController.dispose(); + _scrollController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final preferences = widget.engine.preferences; + if (preferences.layoutMode == ReaderLayoutMode.scroll && + widget.engine.renderer != null) { + return EpubScrollViewport( + xhtml: widget.engine.currentChapterHtml, + preferences: preferences, + localProgression: widget.engine.locator.localProgression, + restorationRevision: widget.engine.restorationRevision, + renderer: widget.engine.renderer!, + controller: _scrollController, + onProgressChanged: (value) => + widget.engine.viewportPositionChanged(value), + ); + } + return ColoredBox( + color: preferences.backgroundColor, + child: LayoutBuilder( + builder: (context, constraints) { + final size = Size( + constraints.maxWidth.isFinite ? constraints.maxWidth : 600, + constraints.maxHeight.isFinite ? constraints.maxHeight : 800, + ); + final scaler = + MediaQuery.maybeTextScalerOf(context) ?? TextScaler.noScaling; + final direction = Directionality.of(context); + final canSpread = + size.width >= 900 && size.height >= 240 && scaler.scale(1) <= 1.8; + _columns = + preferences.layoutMode == ReaderLayoutMode.paginated && + canSpread && + preferences.columnMode != ReaderColumnMode.single + ? 2 + : 1; + final width = math.min(size.width, _columns == 2 ? 1400.0 : 800.0); + final columnWidth = width / _columns; + final contentSize = Size( + math.max(1, columnWidth - preferences.pageMargins.horizontal), + math.max(1, size.height - preferences.pageMargins.vertical), + ); + final key = ( + widget.engine.contentRevision, + contentSize, + preferences, + scaler, + direction, + _columns, + ); + if (_layoutKey != key) { + _layoutKey = key; + _restoration = -1; + _restoring = true; + final generation = ++_layoutGeneration; + _busy = true; + if (_layoutReady?.isCompleted == false) _layoutReady!.complete(); + _layoutReady = Completer(); + _layout = Future.delayed(Duration.zero).then( + (_) => layoutEpubChapter( + widget.engine.blocks, + contentSize: contentSize, + preferences: preferences, + textScaler: scaler, + direction: direction, + cancelled: () => !mounted || generation != _layoutGeneration, + ), + ); + } + return Center( + child: SizedBox( + width: width, + child: FutureBuilder>( + future: _layout, + builder: (context, snapshot) { + if (snapshot.hasError) { + if (_layoutReady?.isCompleted == false) { + _layoutReady!.complete(); + } + _busy = false; + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'Could not lay out this chapter.', + style: TextStyle( + color: preferences.foregroundColor, + ), + ), + const SizedBox(height: 12), + FilledButton( + onPressed: () => setState(() => _layoutKey = null), + child: const Text('Try again'), + ), + ], + ), + ); + } + if (snapshot.connectionState != ConnectionState.done || + !snapshot.hasData || + snapshot.data!.isEmpty) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + CircularProgressIndicator( + color: preferences.foregroundColor, + ), + const SizedBox(height: 12), + Text( + 'Preparing pages…', + style: TextStyle( + color: preferences.foregroundColor, + ), + ), + ], + ), + ); + } + final pages = snapshot.data!; + _restore(pages, width); + Widget content; + if (preferences.layoutMode == ReaderLayoutMode.scroll) { + final heights = [ + for (final page in pages) _pageHeight(page), + ]; + var cumulative = 0.0; + _scrollOffsets = [ + for (final height in heights) + (() { + final start = cumulative; + cumulative += height; + return start; + })(), + ]; + content = ListView.custom( + controller: _scrollController, + itemExtentBuilder: (index, _) => heights[index], + childrenDelegate: _EpubScrollDelegate( + (context, index) => _page(pages[index], scroll: true), + childCount: pages.length, + extent: cumulative, + ), + ); + } else { + content = PageView.builder( + controller: _pagesController, + onPageChanged: _publishPage, + itemCount: (pages.length / _columns).ceil(), + itemBuilder: (context, index) => Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + for (var column = 0; column < _columns; column++) + Expanded( + child: index * _columns + column < pages.length + ? _page(pages[index * _columns + column]) + : const SizedBox.shrink(), + ), + ], + ), + ); + } + // Pointer tracking does not claim the gesture arena from text + // selection, links or scrolling. Only a drag past a boundary turns. + return Listener( + onPointerDown: (_) { + _drag = 0; + _startPage = _pageIndex; + _startScroll = _scrollController.hasClients + ? _scrollController.offset + : 0; + }, + onPointerMove: (event) => _drag += + preferences.layoutMode == ReaderLayoutMode.scroll + ? event.delta.dy + : event.delta.dx, + onPointerUp: (_) { + if (_drag.abs() < 70) return; + if (preferences.layoutMode == ReaderLayoutMode.scroll && + _scrollController.hasClients) { + final p = _scrollController.position; + if (_drag < 0 && + _startScroll >= p.maxScrollExtent - 1) { + _beyondChapter(1); + } + if (_drag > 0 && _startScroll <= 1) _beyondChapter(-1); + } else { + if (_drag < 0 && + _startPage == + (pages.length / _columns).ceil() - 1) { + _beyondChapter(1); + } + if (_drag > 0 && _startPage == 0) _beyondChapter(-1); + } + }, + child: + Localizations.of( + context, + MaterialLocalizations, + ) == + null + ? content + : SelectionArea(child: content), + ); + }, + ), + ), + ); + }, + ), + ); + } + + double _pageHeight(EpubRichPage page) => + widget.engine.preferences.pageMargins.vertical + + page.fragments.fold( + 0, + (sum, fragment) => + sum + fragment.height + fragment.spacing(widget.engine.preferences), + ); + + Widget _page(EpubRichPage page, {bool scroll = false}) { + final preferences = widget.engine.preferences; + final children = [ + for (final fragment in page.fragments) + Padding( + padding: EdgeInsets.only(bottom: fragment.spacing(preferences)), + child: buildEpubFragment(fragment, preferences), + ), + ]; + return Padding( + padding: preferences.pageMargins, + child: scroll + ? Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: children, + ) + // Oversized single lines remain reachable at extreme accessibility sizes. + : ListView( + physics: const ClampingScrollPhysics(), + children: children, + ), + ); + } +} + +final class _EpubScrollDelegate extends SliverChildBuilderDelegate { + _EpubScrollDelegate( + super.builder, { + required super.childCount, + required this.extent, + }); + final double extent; + @override + double estimateMaxScrollOffset( + int firstIndex, + int lastIndex, + double leadingScrollOffset, + double trailingScrollOffset, + ) => extent; +} diff --git a/lib/src/engine/epub/worker/epub_content.dart b/lib/src/engine/epub/worker/epub_content.dart new file mode 100644 index 0000000..59ce516 --- /dev/null +++ b/lib/src/engine/epub/worker/epub_content.dart @@ -0,0 +1,179 @@ +import 'dart:math' as math; + +import 'package:characters/characters.dart'; +import 'package:html/dom.dart'; +import 'package:html/parser.dart' as parser; + +/// Serializable semantic runs. Offsets refer to this normalized content stream, +/// not screen pages; publisher layout and typography never enter the worker. +Map collectEpubContent(String html) { + final body = parser.parse(html).body; + final blocks = >[]; + final anchors = {}; + var offset = 0; + final runs = >[]; + String kind = 'p'; + var preformatted = false; + final listCounters = {}; + + String listMarker(Element item) { + Element? owner = item.parent; + while (owner != null && + !const {'ol', 'ul', 'menu'}.contains(owner.localName)) { + owner = owner.parent; + } + if (owner == null || owner.localName != 'ol') return '• '; + final reversed = owner.attributes.containsKey('reversed'); + final number = + int.tryParse(item.attributes['value']?.trim() ?? '') ?? + listCounters[owner] ?? + int.tryParse(owner.attributes['start']?.trim() ?? '') ?? + (reversed + ? owner.children.where((child) => child.localName == 'li').length + : 1); + listCounters[owner] = number + (reversed ? -1 : 1); + return '$number. '; + } + + void flush() { + if (runs.isEmpty) return; + final length = runs.fold( + 0, + (sum, run) => sum + (run['text'] as String).length, + ); + if (runs.any((run) => (run['text'] as String).trim().isNotEmpty)) { + final text = runs.map((run) => run['text'] as String).join(); + final boundaries = [0]; + var position = 0; + for (final grapheme in text.characters) { + position += grapheme.length; + boundaries.add(position); + } + var start = 0; + var boundaryIndex = 0; + while (start < length) { + var end = math.min(start + 4096, length); + if (end < length) { + final space = text.substring(start, end).lastIndexOf(RegExp(r'\s')); + if (space > 2048) end = start + space + 1; + while (boundaryIndex + 1 < boundaries.length && + boundaries[boundaryIndex + 1] <= end) { + boundaryIndex++; + } + end = boundaries[boundaryIndex]; + if (end <= start) end = boundaries[++boundaryIndex]; + } + var runOffset = 0; + final slice = >[]; + for (final run in runs) { + final value = run['text'] as String; + final from = math.max(0, start - runOffset); + final to = math.min(value.length, end - runOffset); + if (to > from) slice.add({...run, 'text': value.substring(from, to)}); + runOffset += value.length; + if (runOffset >= end) break; + } + blocks.add({ + 'kind': kind, + 'offset': offset + start, + 'length': end - start, + 'runs': slice, + 'paragraphEnd': end == length, + }); + start = end; + } + offset += length + 1; + } + runs.clear(); + } + + void text(String value, Map style) { + if (!preformatted) value = value.replaceAll(RegExp(r'\s+'), ' '); + if (runs.isEmpty && !preformatted) value = value.trimLeft(); + if (value.isNotEmpty) runs.add({'text': value, ...style}); + } + + void visit(Node node, Map inherited) { + if (node is Text) { + text(node.data, inherited); + return; + } + if (node is! Element) return; + final tag = node.localName ?? ''; + final isBlock = const { + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'p', + 'div', + 'li', + 'blockquote', + 'pre', + 'tr', + 'figure', + }.contains(tag); + final previousKind = kind; + final previousPre = preformatted; + if (isBlock) { + flush(); + kind = tag; + preformatted = tag == 'pre'; + } + final id = node.id.isEmpty ? node.attributes['name'] : node.id; + if (id != null && id.isNotEmpty) { + anchors[id] = + offset + + runs.fold(0, (sum, run) => sum + (run['text'] as String).length); + } + final style = {...inherited}; + if (const {'strong', 'b', 'th'}.contains(tag)) style['bold'] = true; + if (const {'em', 'i'}.contains(tag)) style['italic'] = true; + if (tag == 'u' || tag == 'a') style['underline'] = true; + if (tag == 's' || tag == 'del') style['strike'] = true; + if (tag == 'code' || tag == 'pre') style['code'] = true; + if (tag == 'br') runs.add({'text': '\n', ...style}); + if (tag == 'li') text(listMarker(node), style); + if (tag == 'td' || tag == 'th') { + if (runs.isNotEmpty) text(' | ', style); + } + if (tag == 'img') { + flush(); + final src = node.attributes['src']; + if (src != null) { + final width = double.tryParse(node.attributes['width'] ?? ''); + final height = double.tryParse(node.attributes['height'] ?? ''); + blocks.add({ + 'kind': 'image', + 'offset': offset, + 'length': 1, + 'src': src, + 'alt': node.attributes['alt'] ?? 'Illustration', + 'aspect': width != null && height != null && width > 0 && height > 0 + ? width / height + : 1.5, + }); + offset += 2; + } + } else { + for (final child in node.nodes) { + visit(child, style); + } + } + if (isBlock) { + flush(); + kind = previousKind; + preformatted = previousPre; + } + } + + if (body != null) { + for (final node in body.nodes) { + visit(node, const {}); + } + } + flush(); + return {'blocks': blocks, 'anchors': anchors, 'length': offset}; +} diff --git a/lib/src/engine/epub/worker/epub_processor.dart b/lib/src/engine/epub/worker/epub_processor.dart new file mode 100644 index 0000000..f74dce7 --- /dev/null +++ b/lib/src/engine/epub/worker/epub_processor.dart @@ -0,0 +1,324 @@ +import 'dart:convert'; +import 'dart:typed_data'; + +import 'package:epub_pro/epub_pro.dart'; +import 'package:html/dom.dart' as html_dom; +import 'package:html/parser.dart' as html_parser; + +import 'epub_content.dart'; + +/// Pure Dart document session, shared by native isolates and browser workers. +final class EpubProcessor { + EpubBookRef? _book; + List _spine = const []; + final Map> _chapters = {}; + + Future> dispatch( + String command, + Object? argument, + ) async { + if (command == 'open') return _open(argument as Uint8List); + if (command == 'chapter') return _chapter(argument as int); + throw ArgumentError('Unknown EPUB worker command: $command'); + } + + Future> _open(Uint8List bytes) async { + final book = await EpubReader.openBook(bytes); + final metadata = book.schema?.package?.metadata; + if (metadata?.metaItems.any( + (item) => + (item.property == 'rendition:layout' || + item.name == 'rendition:layout') && + (item.content == 'pre-paginated' || + item.attributes['content'] == 'pre-paginated'), + ) ?? + false) { + throw const EpubProcessingException( + 'unsupportedFixedLayout', + 'Fixed-layout EPUB documents are not supported.', + ); + } + final chapters = book.getChapters(); + final package = book.schema?.package; + final html = book.content?.html ?? {}; + final manifest = { + for (final item in package?.manifest?.items ?? []) + item.id: item, + }; + final spine = []; + for (final item in package?.spine?.items ?? []) { + if (!item.isLinear) continue; + final path = manifest[item.idRef]?.href; + if (path == null) continue; + // Keep missing manifest resources in order: opening that chapter should + // fail explicitly rather than silently skipping durable locator indices. + final content = html[path]; + spine.add( + EpubChapterRef( + contentFileName: path, + epubTextContentFileRef: content, + title: path, + ), + ); + } + if (spine.isEmpty) { + final seen = {}; + void visit(EpubChapterRef chapter) { + final path = chapter.contentFileName?.split('#').first; + if (path != null && seen.add(path)) spine.add(chapter); + for (final child in chapter.subChapters) { + visit(child); + } + } + + for (final chapter in chapters) { + visit(chapter); + } + } + if (spine.isEmpty) { + throw const FormatException('The EPUB has no readable spine.'); + } + Map toc(EpubChapterRef chapter) { + final path = chapter.contentFileName?.split('#').first; + final index = spine.indexWhere((item) => item.contentFileName == path); + return { + 'title': chapter.title ?? 'Chapter', + 'index': index < 0 ? 0 : index, + 'anchor': chapter.anchor, + 'children': chapter.subChapters.map(toc).toList(), + }; + } + + List> navigation(List points) { + final result = >[]; + for (final point in points) { + final uri = Uri.tryParse(point.content?.source ?? ''); + if (uri == null || uri.hasScheme) continue; + final path = Uri.decodeComponent(uri.path); + final index = spine.indexWhere((item) => item.contentFileName == path); + final children = navigation(point.childNavigationPoints); + if (index < 0) { + result.addAll(children); + continue; + } + final title = point.navigationLabels + .map((label) => label.text?.trim() ?? '') + .firstWhere((title) => title.isNotEmpty, orElse: () => 'Chapter'); + result.add({ + 'title': title, + 'index': index, + 'anchor': uri.hasFragment ? Uri.decodeComponent(uri.fragment) : null, + 'children': children, + }); + } + return result; + } + + final points = book.schema?.navigation?.navMap?.points; + final tableOfContents = points == null || points.isEmpty + ? chapters.map(toc).toList() + : navigation(points); + _book = book; + _spine = spine; + _chapters.clear(); + return {'count': spine.length, 'toc': tableOfContents}; + } + + Future> _chapter(int index) async { + final cached = _chapters.remove(index); + if (cached != null) { + _chapters[index] = cached; + return cached; + } + if (_book == null || index < 0 || index >= _spine.length) { + throw const FormatException('Chapter is outside the EPUB spine.'); + } + final chapter = _spine[index]; + final raw = await chapter.readHtmlContent(); + final sanitized = await _sanitize(raw, chapter, _book!); + final content = collectEpubContent(sanitized); + final result = {'html': sanitized, ...content}; + _chapters[index] = result; + // Bound by both count and encoded chapter size; a large chapter is returned + // but not retained in addition to its engine copy. + var size = _chapters.values.fold( + 0, + (sum, value) => sum + (value['html'] as String).length, + ); + while (_chapters.length > 3 || size > 4 * 1024 * 1024) { + final removed = _chapters.remove(_chapters.keys.first)!; + size -= (removed['html'] as String).length; + } + return result; + } + + Future _sanitize( + String raw, + EpubChapterRef chapter, + EpubBookRef book, + ) async { + final document = html_parser.parse(raw); + const blockedTags = { + 'script', + 'form', + 'iframe', + 'object', + 'embed', + 'input', + 'button', + 'link', + 'style', + 'video', + 'audio', + 'source', + 'track', + 'use', + }; + for (final tag in blockedTags) { + for (final element in document.querySelectorAll(tag).toList()) { + element.remove(); + } + } + + for (final element in document.querySelectorAll('*').toList()) { + _sanitizeAttributes(element); + if (element.localName != 'img') { + continue; + } + + final source = element.attributes['src']?.trim(); + final uri = source == null ? null : Uri.tryParse(source); + if (source == null || + source.isEmpty || + source.startsWith('//') || + uri == null || + uri.hasScheme) { + element.remove(); + continue; + } + + final resolved = _resolvePath( + chapter.contentFileName ?? '', + Uri.decodeComponent(uri.path), + ); + final image = book.content?.images.entries + .where((entry) => _normalized(entry.key) == _normalized(resolved)) + .map((entry) => entry.value) + .firstOrNull; + if (image == null) { + element.remove(); + continue; + } + + final bytes = await image.readContent(); + final mime = image.contentMimeType ?? 'application/octet-stream'; + if (!mime.toLowerCase().startsWith('image/')) { + element.remove(); + continue; + } + element.attributes['src'] = 'data:$mime;base64,${base64Encode(bytes)}'; + } + return document.outerHtml; + } + + void _sanitizeAttributes(html_dom.Element element) { + for (final name in element.attributes.keys.toList()) { + final normalizedName = name.toString().toLowerCase(); + if (normalizedName.startsWith('on') || normalizedName == 'srcset') { + element.attributes.remove(name); + } + } + + final style = element.attributes['style']; + if (style != null) { + final declarations = style + .split(';') + .map((declaration) => declaration.trim()) + .where( + (declaration) => + declaration.isNotEmpty && + !RegExp( + r'(?:url\s*\(|@import|expression\s*\()', + caseSensitive: false, + ).hasMatch(declaration), + ) + .toList(); + if (declarations.isEmpty) { + element.attributes.remove('style'); + } else { + element.attributes['style'] = declarations.join('; '); + } + } + + for (final attribute in const ['poster', 'background']) { + element.attributes.remove(attribute); + } + if (element.localName != 'img') { + element.attributes.remove('src'); + } + + final href = element.attributes['href']; + if (href == null) { + return; + } + if (element.localName != 'a' || !_isSafeLink(href)) { + element.attributes.remove('href'); + } + } + + bool _isSafeLink(String href) { + final normalized = href + .replaceAll(RegExp(r'[\u0000-\u0020]+'), '') + .toLowerCase(); + return !normalized.startsWith('javascript:') && + !normalized.startsWith('data:') && + !normalized.startsWith('vbscript:') && + !normalized.startsWith('file:'); + } + + String _resolvePath(String chapterPath, String relative) { + final parts = chapterPath.split('/')..removeLast(); + for (final part in relative.split('/')) { + if (part == '..') { + if (parts.isNotEmpty) { + parts.removeLast(); + } + } else if (part != '.' && part.isNotEmpty) { + parts.add(part); + } + } + return parts.join('/'); + } + + String _normalized(String path) => + path.replaceFirst(RegExp(r'^OEBPS/'), '').replaceFirst(RegExp(r'^/'), ''); +} + +final class EpubProcessingException implements Exception { + const EpubProcessingException(this.code, this.message); + final String code; + final String message; +} + +Future> processEpubMessage( + EpubProcessor processor, + Map message, +) async { + try { + return { + 'id': message['id'], + 'result': await processor.dispatch( + message['command'] as String, + message['argument'], + ), + }; + } on EpubProcessingException catch (error) { + return {'id': message['id'], 'error': error.code, 'message': error.message}; + } catch (_) { + return { + 'id': message['id'], + 'error': 'invalidDocument', + 'message': 'The EPUB document or chapter is invalid or malformed.', + }; + } +} diff --git a/lib/src/engine/epub/worker/epub_worker.dart b/lib/src/engine/epub/worker/epub_worker.dart new file mode 100644 index 0000000..5d4be92 --- /dev/null +++ b/lib/src/engine/epub/worker/epub_worker.dart @@ -0,0 +1,17 @@ +import 'dart:typed_data'; + +import 'epub_worker_native.dart' + if (dart.library.js_interop) 'epub_worker_web.dart' + as platform; + +abstract interface class EpubWorker { + Future> request(String command, Object? argument); + void dispose(); +} + +Future createEpubWorker() => platform.createWorker(); + +extension EpubWorkerCommands on EpubWorker { + Future> open(Uint8List bytes) => request('open', bytes); + Future> chapter(int index) => request('chapter', index); +} diff --git a/lib/src/engine/epub/worker/epub_worker_native.dart b/lib/src/engine/epub/worker/epub_worker_native.dart new file mode 100644 index 0000000..3dfebf8 --- /dev/null +++ b/lib/src/engine/epub/worker/epub_worker_native.dart @@ -0,0 +1,118 @@ +import 'dart:async'; +import 'dart:isolate'; + +import '../../../domain/reader_exception.dart'; +import 'epub_processor.dart'; +import 'epub_worker.dart'; + +Future createWorker() async { + final messages = ReceivePort(); + final worker = _NativeEpubWorker(messages); + try { + worker.isolate = await Isolate.spawn( + _run, + messages.sendPort, + onError: messages.sendPort, + onExit: messages.sendPort, + debugName: 'papyrus-epub', + ); + await worker._ready.future; + return worker; + } catch (_) { + worker.dispose(); + rethrow; + } +} + +void _run(SendPort host) { + final requests = ReceivePort(); + final processor = EpubProcessor(); + host.send(requests.sendPort); + Future queue = Future.value(); + requests.listen((dynamic message) { + queue = queue.then((_) async { + host.send( + await processEpubMessage( + processor, + Map.from(message as Map), + ), + ); + }); + }); +} + +final class _NativeEpubWorker implements EpubWorker { + _NativeEpubWorker(this.messages) { + messages.listen(_receive); + } + final ReceivePort messages; + final Completer _ready = Completer(); + final Map>> _pending = {}; + Isolate? isolate; + int _id = 0; + bool _disposed = false; + + void _receive(dynamic message) { + if (message is SendPort) { + _ready.complete(message); + return; + } + if (message is! Map) { + dispose(); + return; + } + final pending = _pending.remove(message['id']); + if (pending == null) return; + if (message['error'] != null) { + pending.completeError( + ReaderException( + message['error'] == 'unsupportedFixedLayout' + ? ReaderErrorCode.unsupportedFixedLayout + : ReaderErrorCode.invalidDocument, + message['message'] as String, + ), + ); + } else { + pending.complete(Map.from(message['result'] as Map)); + } + } + + @override + Future> request(String command, Object? argument) async { + if (_disposed) { + throw const ReaderException( + ReaderErrorCode.engineUnavailable, + 'The document was closed.', + ); + } + final port = await _ready.future; + if (_disposed) { + throw const ReaderException( + ReaderErrorCode.engineUnavailable, + 'The document was closed.', + ); + } + final id = ++_id; + final result = Completer>(); + _pending[id] = result; + port.send({'id': id, 'command': command, 'argument': argument}); + return result.future; + } + + @override + void dispose() { + if (_disposed) return; + _disposed = true; + isolate?.kill(priority: Isolate.immediate); + messages.close(); + const error = ReaderException( + ReaderErrorCode.engineUnavailable, + 'The document was closed.', + ); + if (!_ready.isCompleted) _ready.completeError(error); + for (final pending in _pending.values) { + pending.completeError(error); + } + _pending.clear(); + } +} diff --git a/lib/src/engine/epub/worker/epub_worker_web.dart b/lib/src/engine/epub/worker/epub_worker_web.dart new file mode 100644 index 0000000..4847b25 --- /dev/null +++ b/lib/src/engine/epub/worker/epub_worker_web.dart @@ -0,0 +1,105 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:js_interop'; + +import 'package:flutter/services.dart'; +import 'package:web/web.dart' as web; + +import '../../../domain/reader_exception.dart'; +import 'epub_worker.dart'; + +Future createWorker() async { + final script = await rootBundle.loadString( + 'packages/papyrus_reader/assets/epub_worker.js', + ); + final url = web.URL.createObjectURL( + web.Blob([script.toJS].toJS, web.BlobPropertyBag(type: 'text/javascript')), + ); + try { + return _WebEpubWorker(web.Worker(url.toJS)); + } finally { + web.URL.revokeObjectURL(url); + } +} + +final class _WebEpubWorker implements EpubWorker { + _WebEpubWorker(this.worker) { + worker.onmessage = ((web.MessageEvent event) { + final message = + jsonDecode((event.data as JSString).toDart) as Map; + final result = _pending.remove(message['id']); + if (result == null) return; + if (message['error'] != null) { + result.completeError( + ReaderException( + message['error'] == 'unsupportedFixedLayout' + ? ReaderErrorCode.unsupportedFixedLayout + : ReaderErrorCode.invalidDocument, + message['message'] as String, + ), + ); + } else { + result.complete(Map.from(message['result'] as Map)); + } + }).toJS; + worker.onerror = ((web.Event event) { + _fail( + const ReaderException( + ReaderErrorCode.engineUnavailable, + 'The EPUB worker could not start. Check the application worker assets and Content Security Policy.', + ), + ); + }).toJS; + } + final web.Worker worker; + final Map>> _pending = {}; + int _id = 0; + bool _disposed = false; + + @override + Future> request(String command, Object? argument) { + if (_disposed) { + return Future.error( + const ReaderException( + ReaderErrorCode.engineUnavailable, + 'The document was closed.', + ), + ); + } + final id = ++_id; + final result = Completer>(); + _pending[id] = result; + if (argument is Uint8List) { + // Own a copy: transferring must not detach the host's cached book bytes. + final copy = Uint8List.fromList(argument); + final bytes = copy.toJS; + worker.postMessage( + {'id': id, 'command': command, 'bytes': bytes}.jsify(), + [copy.buffer.toJS].toJS, + ); + } else { + worker.postMessage( + {'id': id, 'command': command, 'argument': argument}.jsify(), + ); + } + return result.future; + } + + void _fail(ReaderException error) { + if (_disposed) return; + _disposed = true; + worker.terminate(); + for (final result in _pending.values) { + result.completeError(error); + } + _pending.clear(); + } + + @override + void dispose() => _fail( + const ReaderException( + ReaderErrorCode.engineUnavailable, + 'The document was closed.', + ), + ); +} diff --git a/lib/src/engine/pdf/pdf_facade.dart b/lib/src/engine/pdf/pdf_facade.dart index 4a93235..609b766 100644 --- a/lib/src/engine/pdf/pdf_facade.dart +++ b/lib/src/engine/pdf/pdf_facade.dart @@ -1,6 +1,8 @@ +import 'dart:async'; import 'dart:math'; -import 'dart:typed_data'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:pdfrx/pdfrx.dart'; @@ -35,6 +37,7 @@ final class PdfViewportConfiguration { required this.brightness, required this.layoutMode, required this.onPageChanged, + this.onPositionChanged, }); final int pageIndex; @@ -43,6 +46,7 @@ final class PdfViewportConfiguration { final Brightness brightness; final ReaderLayoutMode layoutMode; final ValueChanged onPageChanged; + final void Function(int pageIndex, double pageOffset)? onPositionChanged; } abstract interface class PdfFacade { @@ -55,6 +59,10 @@ abstract interface class PdfFacade { Widget buildViewport(PdfViewportConfiguration configuration); } +abstract interface class DisposablePdfFacade { + void dispose(); +} + typedef PdfFacadeFactory = Future Function(Uint8List bytes); abstract interface class PdfMetadataDocument { @@ -80,21 +88,28 @@ Future createPdfrxFacade( key: PdfDocumentRefKey(sourceName, [bytes]), ); PdfMetadataDocument? metadataDocument; + VoidCallback? releaseDocument; try { - metadataDocument = - await metadataDocumentLoader?.call() ?? - _PdfrxMetadataDocument( - await reference.loadDocument((int current, [int? total]) {}), - ); + if (metadataDocumentLoader != null) { + metadataDocument = await metadataDocumentLoader(); + } else { + final shared = reference.resolveListenable(); + releaseDocument = shared.addListener(() {}); + await shared.load(); + if (shared.error != null) throw shared.error!; + metadataDocument = _PdfrxMetadataDocument(shared.document!); + } final outline = await metadataDocument.loadOutline(); - return _PdfrxFacade( + final facade = _PdfrxFacade( documentRef: reference, pageCount: metadataDocument.pageCount, - pageSizes: List.unmodifiable(metadataDocument.pageSizes), outline: List.unmodifiable(outline), + releaseDocument: releaseDocument, ); + releaseDocument = null; + return facade; } on PdfPasswordException catch (error) { throw PdfFacadeException(PdfFacadeError.encrypted, error); } on PdfFacadeException { @@ -102,7 +117,8 @@ Future createPdfrxFacade( } on Object catch (error) { throw PdfFacadeException(PdfFacadeError.invalid, error); } finally { - await metadataDocument?.dispose(); + if (metadataDocumentLoader != null) await metadataDocument?.dispose(); + releaseDocument?.call(); } } @@ -138,20 +154,31 @@ PdfFacadeOutlineEntry _convertOutline(PdfOutlineNode node) { ); } -final class _PdfrxFacade implements PdfFacade { +final class _PdfrxFacade implements PdfFacade, DisposablePdfFacade { _PdfrxFacade({ required PdfDocumentRef documentRef, required this.pageCount, - required List pageSizes, required this.outline, + VoidCallback? releaseDocument, }) : _documentRef = documentRef, - _pageSizes = pageSizes; + _releaseDocument = releaseDocument { + _controller.addListener(_positionChanged); + } final PdfDocumentRef _documentRef; - final List _pageSizes; final PdfViewerController _controller = PdfViewerController(); int _pageIndex = 0; double _pageOffset = 0; + final VoidCallback? _releaseDocument; + PdfViewportConfiguration? _configuration; + bool _restoring = false; + bool _scheduled = false; + bool _disposed = false; + Object? _viewKey; + int _viewerRevision = 0; + DateTime? _lastWheelTurn; + Offset? _touchStart; + int _touchPointers = 0; @override final int pageCount; @@ -163,73 +190,299 @@ final class _PdfrxFacade implements PdfFacade { Future showPage(int pageIndex, double pageOffset) async { _pageIndex = pageIndex; _pageOffset = pageOffset; - if (_controller.isReady) { - await _restorePage(); + if (_controller.isReady && !_restoring) { + _restoring = true; + try { + await _restorePage(); + } finally { + _restoring = false; + } } } + Rect get _spread => pdfSpreadRect( + _controller.layout, + _pageIndex, + _configuration!.facingPages, + ); + + double get _fitZoom => min( + (_controller.viewSize.width - 16) / _spread.width, + (_controller.viewSize.height - 16) / _spread.height, + ); + + bool get _atFit => + _controller.isReady && _controller.currentZoom <= _fitZoom * 1.02; + Future _restorePage() { - if (_pageOffset == 0) { - return _controller.goToPage( - pageNumber: _pageIndex + 1, + final config = _configuration; + if (config == null) return Future.value(); + final rect = _spread; + if (config.layoutMode == ReaderLayoutMode.paginated) { + return _controller.goTo( + _controller.calcMatrixForRect(rect, margin: 8), duration: Duration.zero, ); } - - final pageSize = _pageSizes[_pageIndex]; - final top = pageSize.height * (1 - _pageOffset); - return _controller.goToRectInsidePage( - pageNumber: _pageIndex + 1, - rect: PdfRect(0, max(1, top), pageSize.width, max(0, top - 1)), - anchor: PdfPageAnchor.top, + // Include pdfrx's document margins in the width fit. Fitting only the page + // makes scaled margins wider than the viewport and permits horizontal pan. + // Keep the page-local offset while refitting columns or available space. + final documentWidth = _controller.layout.documentSize.width; + final zoom = (_controller.viewSize.width / documentWidth).clamp(.1, 8.0); + final page = _controller.layout.pageLayouts[_pageIndex]; + return _controller.goTo( + _controller.calcMatrixFor( + Offset( + documentWidth / 2, + page.top + + page.height * _pageOffset + + _controller.viewSize.height / (2 * zoom), + ), + zoom: zoom, + ), duration: Duration.zero, ); } + void _turnSpread(int direction) { + final config = _configuration; + if (_disposed || _restoring || config == null || !_controller.isReady) { + return; + } + final step = config.facingPages ? 2 : 1; + final target = (_pageIndex ~/ step) * step + direction * step; + if (target < 0 || target >= pageCount) return; + unawaited( + showPage(target, 0).then((_) { + if (_disposed) return; + config.onPositionChanged?.call(target, 0); + if (config.onPositionChanged == null) config.onPageChanged(target); + }), + ); + } + @override Widget buildViewport(PdfViewportConfiguration configuration) { - _pageIndex = configuration.pageIndex; - - return applyPdfBrightness( - configuration.brightness, - PdfViewer( - _documentRef, - controller: _controller, - initialPageNumber: _pageIndex + 1, - params: buildPdfViewerParams( - configuration, - onViewerReady: (_, _) { - _restorePage(); - }, - onPageChanged: (pageIndex) { - _pageIndex = pageIndex; - _pageOffset = 0; - configuration.onPageChanged(_pageIndex); - }, - ), - ), + _configuration = configuration; + return LayoutBuilder( + builder: (context, constraints) { + final size = Size(constraints.maxWidth, constraints.maxHeight); + final key = (configuration.layoutMode, configuration.facingPages, size); + if (_viewKey != key) { + _viewKey = key; + _viewerRevision++; + _restoring = true; + } + final revision = _viewerRevision; + return applyPdfBrightness( + configuration.brightness, + Listener( + onPointerSignal: (event) { + if (configuration.layoutMode != ReaderLayoutMode.paginated || + event is! PointerScrollEvent || + _restoring || + !_atFit || + HardwareKeyboard.instance.isControlPressed || + HardwareKeyboard.instance.isMetaPressed) { + return; + } + final delta = + event.scrollDelta.dy.abs() >= event.scrollDelta.dx.abs() + ? event.scrollDelta.dy + : event.scrollDelta.dx; + if (delta.abs() < 10) return; + final now = DateTime.now(); + if (_lastWheelTurn != null && + now.difference(_lastWheelTurn!).inMilliseconds < 250) { + return; + } + _lastWheelTurn = now; + // Let pdfrx finish handling the wheel before snapping to the next row. + WidgetsBinding.instance.addPostFrameCallback((_) { + if (!_disposed && revision == _viewerRevision) { + _turnSpread(delta > 0 ? 1 : -1); + } + }); + WidgetsBinding.instance.scheduleFrame(); + }, + onPointerDown: (event) { + if (event.kind != PointerDeviceKind.touch) return; + _touchPointers++; + _touchStart = _touchPointers == 1 ? event.position : null; + }, + onPointerUp: (event) { + if (event.kind != PointerDeviceKind.touch) return; + final start = _touchStart; + _touchPointers = max(0, _touchPointers - 1); + _touchStart = null; + if (configuration.layoutMode == ReaderLayoutMode.paginated && + start != null && + !_restoring && + _atFit && + (event.position.dx - start.dx).abs() > 70) { + _turnSpread(event.position.dx < start.dx ? 1 : -1); + } + }, + onPointerCancel: (_) { + _touchPointers = 0; + _touchStart = null; + }, + child: PdfViewer( + _documentRef, + key: ValueKey(key), + controller: _controller, + initialPageNumber: _pageIndex + 1, + params: buildPdfViewerParams( + configuration, + viewportSize: size, + currentPageIndex: () => _pageIndex, + onViewerReady: (_, _) async { + if (_disposed || revision != _viewerRevision) return; + try { + await _restorePage(); + } finally { + if (!_disposed && revision == _viewerRevision) { + _restoring = false; + _positionChanged(); + } + } + }, + onPageChanged: (_) => _positionChanged(), + ), + ), + ), + ); + }, ); } + + void _positionChanged() { + if (_disposed || _restoring || _scheduled || !_controller.isReady) return; + _scheduled = true; + WidgetsBinding.instance.addPostFrameCallback((_) { + _scheduled = false; + if (_disposed || _restoring || !_controller.isReady) return; + final config = _configuration; + final index = config?.layoutMode == ReaderLayoutMode.paginated + ? _pageIndex + : ((_controller.pageNumber ?? 1) - 1).clamp(0, pageCount - 1); + final page = _controller.layout.pageLayouts[index]; + final offset = config?.layoutMode == ReaderLayoutMode.paginated && _atFit + ? 0.0 + : ((_controller.visibleRect.top - page.top) / page.height).clamp( + 0.0, + 1.0, + ); + _pageIndex = index; + _pageOffset = offset; + if (config?.onPositionChanged != null) { + config!.onPositionChanged!(index, offset); + } else { + config?.onPageChanged(index); + } + }); + WidgetsBinding.instance.scheduleFrame(); + } + + @override + void dispose() { + if (_disposed) return; + _disposed = true; + _controller.removeListener(_positionChanged); + _releaseDocument?.call(); + _configuration = null; + } } PdfViewerParams buildPdfViewerParams( PdfViewportConfiguration configuration, { PdfViewerReadyCallback? onViewerReady, ValueChanged? onPageChanged, + Size viewportSize = const Size(800, 600), + int Function()? currentPageIndex, }) { final paginated = configuration.layoutMode == ReaderLayoutMode.paginated; return PdfViewerParams( - backgroundColor: configuration.backgroundColor, + backgroundColor: configuration.brightness == Brightness.dark + ? Color.fromARGB( + (configuration.backgroundColor.a * 255).round(), + 255 - (configuration.backgroundColor.r * 255).round(), + 255 - (configuration.backgroundColor.g * 255).round(), + 255 - (configuration.backgroundColor.b * 255).round(), + ) + : configuration.backgroundColor, annotationRenderingMode: PdfAnnotationRenderingMode.annotationAndForms, - panAxis: PanAxis.vertical, - layoutPages: configuration.facingPages + panAxis: PanAxis.free, + layoutPages: paginated + ? (pages, params) => buildPaginatedPdfLayout( + [for (final page in pages) Size(page.width, page.height)], + viewportSize: viewportSize, + facingPages: configuration.facingPages, + margin: params.margin, + ) + : configuration.facingPages ? _facingLayout - : paginated - ? _paginatedLayout : null, - scrollPhysics: paginated - ? const PageScrollPhysics() - : const ClampingScrollPhysics(), + // Scroll physics operate on the entire document. Paginated panning is + // bounded to the active spread instead, with discrete wheel/touch turns. + scrollPhysics: paginated ? null : const ClampingScrollPhysics(), + sizeDelegateProvider: const PdfViewerSizeDelegateProviderLegacy( + minScale: .1, + useAlternativeFitScaleAsMinScale: false, + ), + normalizeMatrix: paginated + ? (matrix, viewSize, layout, controller) { + if (controller == null || !controller.isReady) return matrix; + final rect = pdfSpreadRect( + layout, + currentPageIndex?.call() ?? configuration.pageIndex, + configuration.facingPages, + ); + final fit = min( + (viewSize.width - 16) / rect.width, + (viewSize.height - 16) / rect.height, + ); + final zoom = matrix.zoom.clamp(fit.clamp(.1, 8.0), 8.0).toDouble(); + final visible = matrix.calcVisibleRect(viewSize); + double clampCenter( + double center, + double minEdge, + double maxEdge, + double half, + ) => maxEdge - minEdge <= half * 2 + ? (minEdge + maxEdge) / 2 + : center.clamp(minEdge + half, maxEdge - half); + return controller.calcMatrixFor( + Offset( + clampCenter( + visible.center.dx, + rect.left - 8, + rect.right + 8, + viewSize.width / (2 * zoom), + ), + clampCenter( + visible.center.dy, + rect.top - 8, + rect.bottom + 8, + viewSize.height / (2 * zoom), + ), + ), + zoom: zoom, + viewSize: viewSize, + ); + } + : null, + // Navigation belongs to the reader shortcuts; retain pdfrx copy/zoom keys. + onKey: (_, key, _) => + const [ + LogicalKeyboardKey.arrowLeft, + LogicalKeyboardKey.arrowRight, + LogicalKeyboardKey.pageUp, + LogicalKeyboardKey.pageDown, + LogicalKeyboardKey.space, + ].contains(key) + ? false + : null, onViewerReady: onViewerReady, onPageChanged: (pageNumber) { if (pageNumber != null) { @@ -240,47 +493,111 @@ PdfViewerParams buildPdfViewerParams( } Widget applyPdfBrightness(Brightness brightness, Widget child) { - if (brightness != Brightness.dark) { - return child; - } return ColorFiltered( - colorFilter: const ColorFilter.matrix([ - -1, - 0, - 0, - 0, - 255, - 0, - -1, - 0, - 0, - 255, - 0, - 0, - -1, - 0, - 255, - 0, - 0, - 0, - 1, - 0, - ]), + colorFilter: brightness == Brightness.dark + ? const ColorFilter.matrix([ + -1, + 0, + 0, + 0, + 255, + 0, + -1, + 0, + 0, + 255, + 0, + 0, + -1, + 0, + 255, + 0, + 0, + 0, + 1, + 0, + ]) + : const ColorFilter.matrix([ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + ]), child: child, ); } -PdfPageLayout _paginatedLayout(List pages, PdfViewerParams params) { - final layouts = []; - var y = params.margin; - var documentWidth = 0.0; +Rect pdfSpreadRect(PdfPageLayout layout, int index, bool facingPages) { + final first = facingPages ? (index ~/ 2) * 2 : index; + final rect = layout.pageLayouts[first]; + return facingPages && first + 1 < layout.pageLayouts.length + ? rect.expandToInclude(layout.pageLayouts[first + 1]) + : rect; +} - for (final page in pages) { - layouts.add(Rect.fromLTWH(params.margin, y, page.width, page.height)); - documentWidth = max(documentWidth, page.width + params.margin * 2); - y += page.height + params.margin; +/// Each spread gets a viewport-sized slot at fit scale, so spare space around +/// a short page cannot reveal the neighboring spread. +PdfPageLayout buildPaginatedPdfLayout( + List pages, { + required Size viewportSize, + required bool facingPages, + double margin = 8, +}) { + final step = facingPages ? 2 : 1; + final rows = <({int index, double width, double height})>[]; + var documentWidth = 0.0; + for (var index = 0; index < pages.length; index += step) { + final right = facingPages && index + 1 < pages.length + ? pages[index + 1] + : null; + final width = + pages[index].width + (right == null ? 0 : right.width + margin); + final height = max(pages[index].height, right?.height ?? 0); + rows.add((index: index, width: width, height: height)); + documentWidth = max(documentWidth, width + margin * 2); + } + final layouts = []; + var y = 0.0; + for (final row in rows) { + final zoom = min( + max(1, viewportSize.width - margin * 2) / row.width, + max(1, viewportSize.height - margin * 2) / row.height, + ); + final slotHeight = max(row.height + margin * 2, viewportSize.height / zoom); + final left = (documentWidth - row.width) / 2; + final top = y + (slotHeight - row.height) / 2; + layouts.add( + Rect.fromLTWH(left, top, pages[row.index].width, pages[row.index].height), + ); + if (facingPages && row.index + 1 < pages.length) { + final right = pages[row.index + 1]; + layouts.add( + Rect.fromLTWH( + left + pages[row.index].width + margin, + top, + right.width, + right.height, + ), + ); + } + y += slotHeight; } - return PdfPageLayout( pageLayouts: layouts, documentSize: Size(documentWidth, y), diff --git a/lib/src/engine/pdf/pdf_reader_engine.dart b/lib/src/engine/pdf/pdf_reader_engine.dart index 4a4ed60..8667dd4 100644 --- a/lib/src/engine/pdf/pdf_reader_engine.dart +++ b/lib/src/engine/pdf/pdf_reader_engine.dart @@ -36,6 +36,8 @@ final class PdfReaderEngine extends ReaderEngine { ReaderPreferences _preferences = const ReaderPreferences(); PdfReaderLocator? _locator; List _toc = const []; + bool _disposed = false; + bool _facingPages = false; @override Future load( @@ -56,12 +58,26 @@ final class PdfReaderEngine extends ReaderEngine { ); } + PdfFacade? candidate; try { final bytes = await document.loadBytes(); + if (_disposed) { + throw const ReaderException( + ReaderErrorCode.engineUnavailable, + 'The document was closed.', + ); + } final factory = _facadeFactory ?? (bytes) => createPdfrxFacade(bytes, sourceName: document.id); final facade = await factory(bytes); + candidate = facade; + if (_disposed) { + throw const ReaderException( + ReaderErrorCode.engineUnavailable, + 'The document was closed.', + ); + } if (facade.pageCount <= 0) { throw const PdfFacadeException(PdfFacadeError.invalid); } @@ -74,16 +90,34 @@ final class PdfReaderEngine extends ReaderEngine { ); } + final target = restored ?? _locatorFor(0, pageCount: facade.pageCount); + final toc = facade.outline + .map((entry) => _tocEntry(entry, facade.pageCount)) + .toList(); + await facade.showPage(target.pageIndex, target.pageOffset); + if (_disposed) { + throw const ReaderException( + ReaderErrorCode.engineUnavailable, + 'The document was closed.', + ); + } + final previous = _facade; _facade = facade; + if (previous != null && !identical(previous, facade)) _release(previous); _document = document; _preferences = preferences; - _locator = restored ?? _locatorFor(0); - _toc = facade.outline.map(_tocEntry).toList(); - await facade.showPage(_locator!.pageIndex, _locator!.pageOffset); + _locator = target; + _toc = toc; _publish(); } on ReaderException { + if (candidate != null && !identical(candidate, _facade)) { + _release(candidate); + } rethrow; } on PdfFacadeException catch (error) { + if (candidate != null && !identical(candidate, _facade)) { + _release(candidate); + } throw ReaderException( error.error == PdfFacadeError.encrypted ? ReaderErrorCode.encryptedDocument @@ -94,6 +128,9 @@ final class PdfReaderEngine extends ReaderEngine { cause: error.cause, ); } catch (error) { + if (candidate != null && !identical(candidate, _facade)) { + _release(candidate); + } throw ReaderException( ReaderErrorCode.invalidDocument, 'The PDF document is invalid or malformed.', @@ -102,22 +139,28 @@ final class PdfReaderEngine extends ReaderEngine { } } - ReaderTocEntry _tocEntry(PdfFacadeOutlineEntry entry) { - final index = entry.pageIndex.clamp(0, _facade!.pageCount - 1); + ReaderTocEntry _tocEntry(PdfFacadeOutlineEntry entry, int pageCount) { + final index = entry.pageIndex.clamp(0, pageCount - 1); return ReaderTocEntry( title: entry.title, - locator: _locatorFor(index), - children: entry.children.map(_tocEntry).toList(), + locator: _locatorFor(index, pageCount: pageCount), + children: entry.children + .map((child) => _tocEntry(child, pageCount)) + .toList(), ); } - PdfReaderLocator _locatorFor(int pageIndex, {double pageOffset = 0}) { - final last = (_facade?.pageCount ?? 1) - 1; + PdfReaderLocator _locatorFor( + int pageIndex, { + double pageOffset = 0, + int? pageCount, + }) { + final last = (pageCount ?? _facade?.pageCount ?? 1) - 1; return PdfReaderLocator( pageIndex: pageIndex, pageOffset: pageOffset, totalProgression: last <= 0 - ? 0 + ? pageOffset : ((pageIndex + pageOffset) / last).clamp(0, 1), ); } @@ -133,8 +176,8 @@ final class PdfReaderEngine extends ReaderEngine { 'The locator is not valid for the current PDF.', ); } - _locator = locator; await facade.showPage(locator.pageIndex, locator.pageOffset); + _locator = locator; _publish(); } @@ -157,6 +200,10 @@ final class PdfReaderEngine extends ReaderEngine { } final lastPageIndex = facade.pageCount - 1; + if (lastPageIndex == 0) { + await goTo(_locatorFor(0, pageOffset: progress)); + return; + } final scaledProgress = progress * lastPageIndex; final pageIndex = scaledProgress.floor(); final pageOffset = pageIndex == lastPageIndex @@ -181,7 +228,11 @@ final class PdfReaderEngine extends ReaderEngine { 'No PDF document is loaded.', ); } - final page = locator.pageIndex + delta; + final step = + _preferences.layoutMode == ReaderLayoutMode.paginated && _facingPages + ? 2 + : 1; + final page = (locator.pageIndex ~/ step) * step + delta * step; if (page < 0 || page >= facade.pageCount) { throw const ReaderException( ReaderErrorCode.navigationBoundary, @@ -207,11 +258,21 @@ final class PdfReaderEngine extends ReaderEngine { } void _visiblePageChanged(int pageIndex) { + _visiblePositionChanged(pageIndex, 0); + } + + void _visiblePositionChanged(int pageIndex, double pageOffset) { final facade = _facade; - if (facade == null || pageIndex < 0 || pageIndex >= facade.pageCount) { + if (_disposed || + facade == null || + pageIndex < 0 || + pageIndex >= facade.pageCount) { return; } - final next = _locatorFor(pageIndex); + final next = _locatorFor( + pageIndex, + pageOffset: (pageOffset.clamp(0, 1) * 10000).round() / 10000, + ); if (next == _locator) { return; } @@ -220,12 +281,14 @@ final class PdfReaderEngine extends ReaderEngine { } void _publish() { + if (_disposed) return; snapshot = ReaderReadySnapshot( document: _document!, preferences: _preferences, capabilities: capabilities, locator: _locator, toc: _toc, + locationLabel: 'Page ${_locator!.pageIndex + 1} of ${_facade!.pageCount}', ); notifyListeners(); } @@ -240,21 +303,42 @@ final class PdfReaderEngine extends ReaderEngine { 'The PDF viewport is not ready.', ); } - final facingPages = switch (_preferences.columnMode) { - ReaderColumnMode.double => true, - ReaderColumnMode.single => false, - ReaderColumnMode.automatic => - MediaQuery.maybeSizeOf(context)?.width.compareTo(900) == 1, - }; - return facade.buildViewport( - PdfViewportConfiguration( - pageIndex: locator.pageIndex, - facingPages: facingPages, - backgroundColor: _preferences.backgroundColor, - brightness: _preferences.brightness, - layoutMode: _preferences.layoutMode, - onPageChanged: _visiblePageChanged, - ), + return LayoutBuilder( + builder: (context, constraints) { + final facingPages = switch (_preferences.columnMode) { + ReaderColumnMode.double => constraints.maxWidth >= 600, + ReaderColumnMode.single => false, + ReaderColumnMode.automatic => constraints.maxWidth >= 1000, + }; + _facingPages = facingPages; + return facade.buildViewport( + PdfViewportConfiguration( + pageIndex: locator.pageIndex, + facingPages: facingPages, + backgroundColor: _preferences.backgroundColor, + brightness: _preferences.brightness, + layoutMode: _preferences.layoutMode, + onPageChanged: _visiblePageChanged, + onPositionChanged: _visiblePositionChanged, + ), + ); + }, ); } + + static void _release(PdfFacade facade) { + if (facade is DisposablePdfFacade) { + (facade as DisposablePdfFacade).dispose(); + } + } + + @override + void dispose() { + if (_disposed) return; + _disposed = true; + final facade = _facade; + _facade = null; + if (facade != null) _release(facade); + super.dispose(); + } } diff --git a/lib/src/presentation/papyrus_reader.dart b/lib/src/presentation/papyrus_reader.dart index f4bb030..1429728 100644 --- a/lib/src/presentation/papyrus_reader.dart +++ b/lib/src/presentation/papyrus_reader.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:math' as math; +import 'dart:ui' as ui; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -14,6 +15,7 @@ import '../domain/reader_snapshot.dart'; import '../domain/reader_toc_entry.dart'; import '../domain/reader_types.dart'; import '../engine/reader_engine_registry.dart'; +import 'reader_material_theme.dart'; import 'reader_theme_data.dart'; import 'reader_ui_builders.dart'; @@ -57,6 +59,7 @@ final class _PapyrusReaderState extends State { late bool _ownsController; ReaderSnapshot? _observedSnapshot; _ReaderPanel _panel = _ReaderPanel.none; + bool _controlsVisible = true; double? _dragProgress; int _loadGeneration = 0; bool _loadedDependencies = false; @@ -77,6 +80,10 @@ final class _PapyrusReaderState extends State { debugLabel: 'reader wide panel', ); FocusNode? _widePanelOpener; + final FocusNode _readerFocusNode = FocusNode(debugLabel: 'reader navigation'); + final FocusNode _controlsToggleFocusNode = FocusNode( + debugLabel: 'reader controls toggle', + ); bool get _isCommandBusy => _pendingCommands > 0; @@ -84,6 +91,7 @@ final class _PapyrusReaderState extends State { void initState() { super.initState(); _attachController(); + HardwareKeyboard.instance.addHandler(_handleUnfocusedReadingKey); } @override @@ -114,11 +122,48 @@ final class _PapyrusReaderState extends State { if (controllerChanged || documentChanged) { _panel = _ReaderPanel.none; + _controlsVisible = true; _dragProgress = null; _loadDocument(); } } + Map get _keyBindings => { + if (!_controlsVisible) + const SingleActivator(LogicalKeyboardKey.escape): _toggleControls, + const SingleActivator(LogicalKeyboardKey.arrowLeft): _goPrevious, + const SingleActivator(LogicalKeyboardKey.pageUp): _goPrevious, + const SingleActivator(LogicalKeyboardKey.arrowRight): _goNext, + const SingleActivator(LogicalKeyboardKey.pageDown): _goNext, + const SingleActivator(LogicalKeyboardKey.space): _goNext, + const SingleActivator(LogicalKeyboardKey.space, shift: true): _goPrevious, + }; + + bool _handleUnfocusedReadingKey(KeyEvent event) { + // Browser accessibility can park focus on a scope when chrome disappears. + // Only the active reader in focus mode may recover keys from that scope; + // focused inputs, other routes and normal reader shortcuts retain control. + final primaryFocus = FocusManager.instance.primaryFocus; + if (!mounted || + _controlsVisible || + _readerFocusNode.hasFocus || + _controller.snapshot.status != ReaderStatus.ready || + _compactPanelRoute != null || + _panel != _ReaderPanel.none || + ModalRoute.of(context)?.isCurrent != true || + (primaryFocus != null && primaryFocus is! FocusScopeNode)) { + return false; + } + for (final entry in _keyBindings.entries) { + if (entry.key.accepts(event, HardwareKeyboard.instance)) { + _readerFocusNode.requestFocus(); + entry.value(); + return true; + } + } + return false; + } + void _attachController() { final external = widget.controller; _ownsController = external == null; @@ -247,28 +292,63 @@ final class _PapyrusReaderState extends State { _tocButtonFocusNode.dispose(); _settingsButtonFocusNode.dispose(); _widePanelFocusNode.dispose(); + HardwareKeyboard.instance.removeHandler(_handleUnfocusedReadingKey); + _readerFocusNode.dispose(); + _controlsToggleFocusNode.dispose(); _commandRevision.dispose(); super.dispose(); } @override Widget build(BuildContext context) { - final theme = widget.theme ?? ReaderThemeData.fromTheme(Theme.of(context)); final snapshot = _controller.snapshot; - - return Material( - color: theme.surfaceColor, - child: SafeArea( - child: switch (snapshot.status) { - ReaderStatus.idle => _buildEmpty(context, snapshot, theme), - ReaderStatus.loading => _buildLoading(context, snapshot, theme), - ReaderStatus.error => _buildError(context, snapshot, theme), - ReaderStatus.ready => _buildReady(context, snapshot, theme), - }, + final ambient = Theme.of(context); + final readerTheme = snapshot.status == ReaderStatus.ready + ? buildReaderMaterialTheme(ambient, snapshot.preferences.brightness) + : ambient; + final theme = widget.theme ?? ReaderThemeData.fromTheme(readerTheme); + return Theme( + data: readerTheme, + child: Builder( + builder: (context) => Material( + color: theme.surfaceColor, + child: SafeArea( + child: switch (snapshot.status) { + ReaderStatus.idle => _buildEmpty(context, snapshot, theme), + ReaderStatus.loading => _stateChrome( + _buildLoading(context, snapshot, theme), + theme, + ), + ReaderStatus.error => _stateChrome( + _buildError(context, snapshot, theme), + theme, + ), + ReaderStatus.ready => _buildReady(context, snapshot, theme), + }, + ), + ), ), ); } + Widget _stateChrome(Widget child, ReaderThemeData theme) { + return Column( + children: [ + if (widget.onBack != null) + Align( + alignment: AlignmentDirectional.centerStart, + child: _ReaderIconButton( + icon: Icons.arrow_back_rounded, + tooltip: 'Back', + onPressed: widget.onBack, + theme: theme, + ), + ), + Expanded(child: child), + ], + ); + } + ReaderStateContext _stateContext(ReaderSnapshot snapshot) { return ReaderStateContext( document: widget.document, @@ -379,6 +459,33 @@ final class _PapyrusReaderState extends State { ); } + void _toggleControls() { + _dismissCompactPanel(); + setState(() { + _controlsVisible = !_controlsVisible; + _panel = _ReaderPanel.none; + _widePanelOpener = null; + }); + unawaited(_restoreControlsFocus()); + } + + Future _restoreControlsFocus() async { + // Wait for the chrome and its browser semantics to finish reflowing before + // restoring the view focus that removal of the toolbar can blur. + await WidgetsBinding.instance.endOfFrame; + await WidgetsBinding.instance.endOfFrame; + if (!mounted || _controller.snapshot.status != ReaderStatus.ready) return; + WidgetsBinding.instance.platformDispatcher.requestViewFocusChange( + viewId: View.of(context).viewId, + state: ui.ViewFocusState.focused, + direction: ui.ViewFocusDirection.undefined, + ); + final focus = _controlsVisible && widget.builders.toolbar == null + ? _controlsToggleFocusNode + : _readerFocusNode; + focus.requestFocus(); + } + Widget _buildReady( BuildContext context, ReaderSnapshot snapshot, @@ -394,6 +501,8 @@ final class _PapyrusReaderState extends State { snapshot: snapshot, onBack: widget.onBack, isBusy: _isCommandBusy, + toggleControls: _toggleControls, + controlsVisible: _controlsVisible, openTableOfContents: () => _openPanel( context, _ReaderPanel.tableOfContents, @@ -406,98 +515,169 @@ final class _PapyrusReaderState extends State { ); return CallbackShortcuts( - bindings: { - const SingleActivator(LogicalKeyboardKey.arrowLeft): _goPrevious, - const SingleActivator(LogicalKeyboardKey.pageUp): _goPrevious, - const SingleActivator(LogicalKeyboardKey.arrowRight): _goNext, - const SingleActivator(LogicalKeyboardKey.pageDown): _goNext, - }, + bindings: _keyBindings, child: FocusTraversalGroup( policy: OrderedTraversalPolicy(), child: Focus( + focusNode: _readerFocusNode, + // Engines and controls own the accessible reading content. + includeSemantics: false, autofocus: true, - child: Column( + child: Stack( children: [ - FocusTraversalOrder( - order: const NumericFocusOrder(1), - child: - toolbar ?? - _DefaultReaderToolbar( - document: widget.document, - onBack: widget.onBack, - onTableOfContents: () => _openPanel( - context, - _ReaderPanel.tableOfContents, - isWide, - theme, - ), - onSettings: () => _openPanel( - context, - _ReaderPanel.settings, - isWide, - theme, - ), - tocFocusNode: _tocButtonFocusNode, - settingsFocusNode: _settingsButtonFocusNode, - theme: theme, - isWide: isWide, - ), - ), - if (_isCommandBusy) - const LinearProgressIndicator( - key: ValueKey('reader-command-progress'), - minHeight: 2, - ), - if (_commandError case final error?) - _ReaderCommandError( - message: error, - theme: theme, - onDismiss: () => setState(() => _commandError = null), - ), - Expanded( - child: Row( - children: [ - Expanded( - child: FocusTraversalOrder( - order: const NumericFocusOrder(3), - child: _buildViewport(context, snapshot), - ), - ), - if (isWide) ...[ - VerticalDivider(width: 1, color: theme.dividerColor), - FocusTraversalOrder( - order: const NumericFocusOrder(2), - child: SizedBox( - key: const ValueKey('reader-side-panel'), - width: theme.sidePanelWidth, - child: ColoredBox( - color: theme.panelColor, - child: _buildWidePanel( + Column( + children: [ + if (_controlsVisible) + FocusTraversalOrder( + key: const ValueKey('reader-toolbar'), + order: const NumericFocusOrder(1), + child: + toolbar ?? + _DefaultReaderToolbar( + document: widget.document, + onBack: widget.onBack, + onTableOfContents: () => _openPanel( + context, + _ReaderPanel.tableOfContents, + isWide, + theme, + ), + onSettings: () => _openPanel( context, - snapshot, + _ReaderPanel.settings, + isWide, theme, ), + tocFocusNode: _tocButtonFocusNode, + settingsFocusNode: _settingsButtonFocusNode, + theme: theme, + isWide: isWide, + ), + ), + if (_controlsVisible) + SizedBox( + key: const ValueKey('reader-toolbar-border'), + height: 1, + child: _isCommandBusy + ? const LinearProgressIndicator( + key: ValueKey('reader-command-progress'), + minHeight: 1, + ) + : ColoredBox(color: theme.dividerColor), + ), + if (_commandError case final error?) + _ReaderCommandError( + message: error, + theme: theme, + onDismiss: () => setState(() => _commandError = null), + ), + Expanded( + key: const ValueKey('reader-content'), + child: Row( + children: [ + Expanded( + child: FocusTraversalOrder( + order: const NumericFocusOrder(3), + child: _buildViewport(context, snapshot), ), ), + if (isWide && _panel != _ReaderPanel.none) ...[ + VerticalDivider( + width: 1, + color: theme.dividerColor, + ), + FocusTraversalOrder( + order: const NumericFocusOrder(2), + child: SizedBox( + key: const ValueKey('reader-side-panel'), + width: theme.sidePanelWidth, + child: ColoredBox( + color: theme.panelColor, + child: _buildWidePanel( + context, + snapshot, + theme, + ), + ), + ), + ), + ], + ], + ), + ), + if (_controlsVisible) + FocusTraversalOrder( + key: const ValueKey('reader-progress-controls'), + order: const NumericFocusOrder(4), + child: _ReaderProgressControls( + progress: + _dragProgress ?? _progressOf(snapshot.locator), + locationLabel: snapshot.locationLabel, + onProgressChanged: (value) { + setState(() => _dragProgress = value); + }, + onProgressChangeEnd: _goToProgress, + onPrevious: _goPrevious, + onNext: _goNext, + enabled: !_isCommandBusy, + theme: theme, ), - ], - ], - ), + ), + ], ), - FocusTraversalOrder( - order: const NumericFocusOrder(4), - child: _ReaderProgressControls( - progress: _dragProgress ?? _progressOf(snapshot.locator), - onProgressChanged: (value) { - setState(() => _dragProgress = value); - }, - onProgressChangeEnd: _goToProgress, - onPrevious: _goPrevious, - onNext: _goNext, - enabled: !_isCommandBusy, - theme: theme, + if (toolbar == null || !_controlsVisible) + PositionedDirectional( + key: const ValueKey('reader-controls-toggle'), + top: _controlsVisible + ? (_readerToolbarHeight(context, theme, isWide) - + theme.minimumTargetSize) / + 2 + : 8, + end: 8, + child: ListenableBuilder( + listenable: _controlsToggleFocusNode, + builder: (context, _) { + final label = _controlsVisible + ? 'Hide controls' + : 'Show controls'; + return Semantics( + container: true, + button: true, + label: label, + focusable: true, + focused: _controlsToggleFocusNode.hasFocus, + onTap: _toggleControls, + onDidGainAccessibilityFocus: + _controlsToggleFocusNode.requestFocus, + excludeSemantics: true, + child: Tooltip( + message: label, + excludeFromSemantics: true, + child: Material( + color: _controlsVisible + ? Colors.transparent + : theme.chromeColor, + shape: const CircleBorder(), + child: IconTheme( + data: IconThemeData( + color: theme.onChromeColor, + ), + child: _ReaderIconButton( + icon: _controlsVisible + ? Icons.fullscreen_rounded + : Icons.fullscreen_exit_rounded, + tooltip: null, + focusNode: _controlsToggleFocusNode, + onPressed: _toggleControls, + theme: theme, + ), + ), + ), + ), + ); + }, + ), ), - ), ], ), ), @@ -602,19 +782,67 @@ final class _PapyrusReaderState extends State { modalBarrierColor: Theme.of(context).bottomSheetTheme.modalBarrierColor, useSafeArea: true, isScrollControlled: true, - showDragHandle: true, + backgroundColor: Colors.transparent, + showDragHandle: false, constraints: BoxConstraints( maxWidth: theme.compactBreakpoint, - maxHeight: MediaQuery.sizeOf(context).height * 0.82, + maxHeight: math.max( + 160, + (MediaQuery.sizeOf(context).height - + MediaQuery.viewInsetsOf(context).bottom) * + 0.88, + ), ), builder: (sheetContext) { Widget buildPanel() { - return _panelWidget( - sheetContext, - _controller.snapshot, - panel, - theme, - () => Navigator.of(sheetContext).pop(), + // Captured route themes are a snapshot. Appearance can change while + // this sheet is open, so use the current reader theme on every update. + final preferences = _controller.preferences; + final currentTheme = buildReaderMaterialTheme( + Theme.of(this.context), + preferences.brightness, + ); + final colors = currentTheme.colorScheme; + final panelTheme = + widget.theme ?? ReaderThemeData.fromTheme(currentTheme); + return Theme( + data: currentTheme, + child: Builder( + builder: (context) => ClipRRect( + borderRadius: const BorderRadius.vertical( + top: Radius.circular(28), + ), + child: ColoredBox( + color: panelTheme.panelColor, + child: Column( + children: [ + SizedBox( + height: 32, + child: Center( + child: Container( + width: 32, + height: 4, + decoration: BoxDecoration( + color: colors.onSurfaceVariant, + borderRadius: BorderRadius.circular(2), + ), + ), + ), + ), + Expanded( + child: _panelWidget( + context, + _controller.snapshot, + panel, + panelTheme, + () => Navigator.of(sheetContext).pop(), + ), + ), + ], + ), + ), + ), + ), ); } @@ -736,6 +964,10 @@ final class _PapyrusReaderState extends State { final generation = _commandGeneration; final controller = _controller; + final restoreReadingFocus = + _readerFocusNode.hasFocus && + _panel == _ReaderPanel.none && + _compactPanelRoute == null; _pendingCommands++; _commandError = null; _commandRevision.value++; @@ -769,6 +1001,16 @@ final class _PapyrusReaderState extends State { _pendingCommands = math.max(0, _pendingCommands - 1); _commandRevision.value++; setState(() {}); + if (restoreReadingFocus) { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted && + generation == _commandGeneration && + _panel == _ReaderPanel.none && + _compactPanelRoute == null) { + _readerFocusNode.requestFocus(); + } + }); + } }); } @@ -840,6 +1082,18 @@ final class _ReaderCommandError extends StatelessWidget { } } +double _readerToolbarHeight( + BuildContext context, + ReaderThemeData theme, + bool isWide, +) { + final textScale = MediaQuery.textScalerOf(context).scale(1); + return math.max( + isWide ? theme.wideToolbarHeight : theme.compactToolbarHeight, + theme.minimumTargetSize + math.max(8, (textScale - 1) * 12), + ); +} + final class _DefaultReaderToolbar extends StatelessWidget { const _DefaultReaderToolbar({ required this.document, @@ -863,11 +1117,7 @@ final class _DefaultReaderToolbar extends StatelessWidget { @override Widget build(BuildContext context) { - final textScale = MediaQuery.textScalerOf(context).scale(1); - final height = math.max( - isWide ? theme.wideToolbarHeight : theme.compactToolbarHeight, - theme.minimumTargetSize + math.max(8, (textScale - 1) * 12), - ); + final height = _readerToolbarHeight(context, theme, isWide); return Container( height: height, @@ -916,6 +1166,9 @@ final class _DefaultReaderToolbar extends StatelessWidget { onPressed: onSettings, theme: theme, ), + // The controls toggle stays mounted in the shell overlay during + // reflow, preserving browser accessibility and keyboard focus. + SizedBox(width: theme.minimumTargetSize), ], ), ), @@ -935,7 +1188,7 @@ final class _ReaderIconButton extends StatelessWidget { }); final IconData icon; - final String tooltip; + final String? tooltip; final VoidCallback? onPressed; final ReaderThemeData theme; final FocusNode? focusNode; @@ -964,6 +1217,7 @@ final class _ReaderProgressControls extends StatelessWidget { required this.onNext, required this.enabled, required this.theme, + this.locationLabel, }); final double progress; @@ -973,6 +1227,7 @@ final class _ReaderProgressControls extends StatelessWidget { final VoidCallback onNext; final bool enabled; final ReaderThemeData theme; + final String? locationLabel; @override Widget build(BuildContext context) { @@ -987,47 +1242,61 @@ final class _ReaderProgressControls extends StatelessWidget { style: TextStyle(color: theme.onChromeColor), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Row( + child: Column( + mainAxisSize: MainAxisSize.min, children: [ - _ReaderIconButton( - icon: Icons.chevron_left_rounded, - tooltip: 'Previous', - onPressed: enabled ? onPrevious : null, - theme: theme, - ), - Expanded( - child: Semantics( - label: 'Reading progress', - value: '$percent percent', - slider: true, - child: SliderTheme( - data: SliderTheme.of(context).copyWith( - activeTrackColor: theme.progressColor, - thumbColor: theme.handleColor, + if (locationLabel != null) + Text( + locationLabel!, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.labelMedium?.copyWith( + color: theme.onChromeColor, + ), + ), + Row( + children: [ + _ReaderIconButton( + icon: Icons.chevron_left_rounded, + tooltip: 'Previous', + onPressed: enabled ? onPrevious : null, + theme: theme, + ), + Expanded( + child: Semantics( + label: 'Reading progress', + value: '$percent percent', + slider: true, + child: SliderTheme( + data: SliderTheme.of(context).copyWith( + activeTrackColor: theme.progressColor, + thumbColor: theme.handleColor, + ), + child: Slider( + value: normalized, + onChanged: enabled ? onProgressChanged : null, + onChangeEnd: enabled ? onProgressChangeEnd : null, + ), + ), ), - child: Slider( - value: normalized, - onChanged: enabled ? onProgressChanged : null, - onChangeEnd: enabled ? onProgressChangeEnd : null, + ), + SizedBox( + width: 64, + child: Text( + '$percent%', + key: const ValueKey('reader-progress-label'), + textAlign: TextAlign.center, + maxLines: 1, + semanticsLabel: '$percent percent read', ), ), - ), - ), - SizedBox( - width: 64, - child: Text( - '$percent%', - key: const ValueKey('reader-progress-label'), - textAlign: TextAlign.center, - maxLines: 1, - semanticsLabel: '$percent percent read', - ), - ), - _ReaderIconButton( - icon: Icons.chevron_right_rounded, - tooltip: 'Next', - onPressed: enabled ? onNext : null, - theme: theme, + _ReaderIconButton( + icon: Icons.chevron_right_rounded, + tooltip: 'Next', + onPressed: enabled ? onNext : null, + theme: theme, + ), + ], ), ], ), @@ -1185,6 +1454,43 @@ final class _ReaderSettingsPanel extends StatelessWidget { padding: EdgeInsets.all(theme.panelPadding), children: [ if (capabilities.supportsTextCustomization) ...[ + DropdownButtonFormField( + key: ValueKey(('reader-font', preferences.fontFamily)), + initialValue: + const [ + null, + 'serif', + 'sans-serif', + 'monospace', + ].contains(preferences.fontFamily) + ? preferences.fontFamily ?? 'system' + : 'system', + isExpanded: true, + decoration: const InputDecoration( + labelText: 'Typeface', + border: OutlineInputBorder(), + ), + items: const [ + DropdownMenuItem(value: 'system', child: Text('System')), + DropdownMenuItem(value: 'serif', child: Text('Serif')), + DropdownMenuItem( + value: 'sans-serif', + child: Text('Sans serif'), + ), + DropdownMenuItem( + value: 'monospace', + child: Text('Monospace'), + ), + ], + onChanged: enabled + ? (value) => _update( + preferences.copyWith( + fontFamily: value == 'system' ? null : value, + ), + ) + : null, + ), + const SizedBox(height: 20), _SettingSlider( title: 'Font size', value: preferences.fontSize.clamp(8, 72), @@ -1225,11 +1531,12 @@ final class _ReaderSettingsPanel extends StatelessWidget { preferences.copyWith(pageMargins: EdgeInsets.all(value)), ), ), - const Divider(), + const SizedBox(height: 12), ], if (capabilities.supportsPagination || capabilities.supportsScrolling) ...[ DropdownButtonFormField( + key: ValueKey(('reader-mode', preferences.layoutMode)), initialValue: preferences.layoutMode, isExpanded: true, decoration: const InputDecoration( @@ -1260,6 +1567,7 @@ final class _ReaderSettingsPanel extends StatelessWidget { if (capabilities.supportsColumnMode) ...[ const SizedBox(height: 12), DropdownButtonFormField( + key: ValueKey(('reader-columns', preferences.columnMode)), initialValue: preferences.columnMode, isExpanded: true, decoration: const InputDecoration( @@ -1472,8 +1780,19 @@ final class _AppearancePreset extends StatelessWidget { @override Widget build(BuildContext context) { + final colors = Theme.of(context).colorScheme; return ChoiceChip( label: Text(label), + labelStyle: TextStyle( + color: selected ? colors.onSecondaryContainer : colors.onSurface, + ), + color: WidgetStateProperty.resolveWith( + (states) => states.contains(WidgetState.selected) + ? colors.secondaryContainer + : colors.surfaceContainerLow, + ), + checkmarkColor: colors.onSecondaryContainer, + side: BorderSide(color: colors.outlineVariant), selected: selected, avatar: CircleAvatar(backgroundColor: background), onSelected: enabled diff --git a/lib/src/presentation/reader_material_theme.dart b/lib/src/presentation/reader_material_theme.dart new file mode 100644 index 0000000..68d35cf --- /dev/null +++ b/lib/src/presentation/reader_material_theme.dart @@ -0,0 +1,112 @@ +import 'package:flutter/material.dart'; + +/// Reader colors must not retain the host's resolved canvas/component colors. +/// Keep typography, control geometry and motion policy, but construct Material +/// defaults again from the selected reading appearance. +ThemeData buildReaderMaterialTheme(ThemeData host, Brightness brightness) { + final colors = ColorScheme.fromSeed( + seedColor: host.colorScheme.primary, + brightness: brightness, + ); + final input = host.inputDecorationTheme; + InputBorder? border(InputBorder? value, Color color) => + value?.copyWith(borderSide: value.borderSide.copyWith(color: color)); + TextStyle text(TextStyle? value, Color color) => + (value ?? const TextStyle()).copyWith(color: color); + final labels = WidgetStateTextStyle.resolveWith( + (states) => text( + input.floatingLabelStyle ?? input.labelStyle, + states.contains(WidgetState.error) + ? colors.error + : states.contains(WidgetState.disabled) + ? colors.onSurface.withValues(alpha: .38) + : states.contains(WidgetState.focused) + ? colors.primary + : colors.onSurfaceVariant, + ), + ); + return ThemeData( + useMaterial3: host.useMaterial3, + colorScheme: colors, + canvasColor: colors.surface, + scaffoldBackgroundColor: colors.surface, + cardColor: colors.surfaceContainerLow, + hintColor: colors.onSurfaceVariant, + disabledColor: colors.onSurface.withValues(alpha: .38), + iconTheme: host.iconTheme.copyWith(color: colors.onSurface), + primaryIconTheme: host.primaryIconTheme.copyWith(color: colors.onPrimary), + platform: host.platform, + visualDensity: host.visualDensity, + materialTapTargetSize: host.materialTapTargetSize, + typography: host.typography, + textTheme: host.textTheme.apply( + bodyColor: colors.onSurface, + displayColor: colors.onSurface, + ), + primaryTextTheme: host.primaryTextTheme.apply( + bodyColor: colors.onPrimary, + displayColor: colors.onPrimary, + ), + extensions: host.extensions.values, + pageTransitionsTheme: host.pageTransitionsTheme, + splashFactory: host.splashFactory, + // Retain the e-ink host's transparent ink effects. + highlightColor: host.highlightColor.a == 0 ? host.highlightColor : null, + splashColor: host.splashColor.a == 0 ? host.splashColor : null, + inputDecorationTheme: input.copyWith( + labelStyle: text(input.labelStyle, colors.onSurfaceVariant), + floatingLabelStyle: labels, + hintStyle: text(input.hintStyle, colors.onSurfaceVariant), + helperStyle: text(input.helperStyle, colors.onSurfaceVariant), + errorStyle: text(input.errorStyle, colors.error), + fillColor: colors.surfaceContainerHighest, + iconColor: colors.onSurfaceVariant, + prefixIconColor: colors.onSurfaceVariant, + suffixIconColor: colors.onSurfaceVariant, + border: border(input.border, colors.outline), + enabledBorder: border(input.enabledBorder, colors.outline), + focusedBorder: border(input.focusedBorder, colors.primary), + disabledBorder: border( + input.disabledBorder, + colors.onSurface.withValues(alpha: .12), + ), + errorBorder: border(input.errorBorder, colors.error), + focusedErrorBorder: border(input.focusedErrorBorder, colors.error), + focusColor: colors.primary.withValues(alpha: .12), + hoverColor: host.hoverColor.a == 0 + ? host.hoverColor + : colors.onSurface.withValues(alpha: .08), + ), + filledButtonTheme: FilledButtonThemeData( + style: _geometry(host.filledButtonTheme.style), + ), + elevatedButtonTheme: ElevatedButtonThemeData( + style: _geometry(host.elevatedButtonTheme.style), + ), + outlinedButtonTheme: OutlinedButtonThemeData( + style: _geometry(host.outlinedButtonTheme.style), + ), + textButtonTheme: TextButtonThemeData( + style: _geometry(host.textButtonTheme.style), + ), + iconButtonTheme: IconButtonThemeData( + style: _geometry(host.iconButtonTheme.style), + ), + dividerTheme: host.dividerTheme.copyWith(color: colors.outlineVariant), + ); +} + +ButtonStyle? _geometry(ButtonStyle? style) => style == null + ? null + : ButtonStyle( + animationDuration: style.animationDuration, + padding: style.padding, + shape: style.shape, + minimumSize: style.minimumSize, + maximumSize: style.maximumSize, + fixedSize: style.fixedSize, + elevation: style.elevation, + visualDensity: style.visualDensity, + enableFeedback: style.enableFeedback, + tapTargetSize: style.tapTargetSize, + ); diff --git a/lib/src/presentation/reader_theme_data.dart b/lib/src/presentation/reader_theme_data.dart index 5b18518..7568516 100644 --- a/lib/src/presentation/reader_theme_data.dart +++ b/lib/src/presentation/reader_theme_data.dart @@ -13,8 +13,8 @@ final class ReaderThemeData { required this.dividerColor, this.compactBreakpoint = 720, this.sidePanelWidth = 320, - this.compactToolbarHeight = 64, - this.wideToolbarHeight = 72, + this.compactToolbarHeight = 56, + this.wideToolbarHeight = 64, this.minimumTargetSize = 48, this.panelPadding = 16, }); diff --git a/lib/src/presentation/reader_ui_builders.dart b/lib/src/presentation/reader_ui_builders.dart index f1840e5..0e5667d 100644 --- a/lib/src/presentation/reader_ui_builders.dart +++ b/lib/src/presentation/reader_ui_builders.dart @@ -21,6 +21,8 @@ final class ReaderToolbarContext { required this.openSettings, this.onBack, this.isBusy = false, + this.toggleControls, + this.controlsVisible = true, }); final ReaderDocument document; @@ -29,6 +31,10 @@ final class ReaderToolbarContext { final VoidCallback openTableOfContents; final VoidCallback openSettings; final bool isBusy; + + /// Hide or restore reader chrome without changing the reading position. + final VoidCallback? toggleControls; + final bool controlsVisible; } final class ReaderPanelContext { diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..9d4e4c4 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,626 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: ace891da0862b0e4cabbb064ee3fd87b2728b898949fdb366d83fe98342c9f19 + url: "https://pub.dev" + source: hosted + version: "4.2.0" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + characters: + dependency: "direct main" + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.dev" + source: hosted + version: "1.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + code_assets: + dependency: transitive + description: + name: code_assets + sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf + url: "https://pub.dev" + source: hosted + version: "3.0.7" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + epub_pro: + dependency: "direct main" + description: + name: epub_pro + sha256: "2f405dcf31e45abf4e714acf99ca85e6bea61643160f5a51239f3077f6d3f06a" + url: "https://pub.dev" + source: hosted + version: "5.6.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + ffi: + dependency: transitive + description: + name: ffi + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_html: + dependency: "direct main" + description: + name: flutter_html + sha256: "38a2fd702ffdf3243fb7441ab58aa1bc7e6922d95a50db76534de8260638558d" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + hooks: + dependency: transitive + description: + name: hooks + sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + html: + dependency: "direct main" + description: + name: html + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.dev" + source: hosted + version: "0.15.6" + http: + dependency: transitive + description: + name: http + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.dev" + source: hosted + version: "1.6.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + image: + dependency: transitive + description: + name: image + sha256: "1976370a4df3091bb0f72409c187ad1f9132a818bc6b95ca59c0bae1c75c688e" + url: "https://pub.dev" + source: hosted + version: "4.9.2" + jni: + dependency: transitive + description: + name: jni + sha256: f038e58b4dc2c9037f50e233175086337e0b305e356d28211bf55f21c504cbd3 + url: "https://pub.dev" + source: hosted + version: "1.0.3" + jni_flutter: + dependency: transitive + description: + name: jni_flutter + sha256: "7b717011ea40d04fd47c2731d3d1d36eb99eba3435c2753d62489e8c3c9991d5" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + jni_util: + dependency: transitive + description: + name: jni_util + sha256: "1ba86da04a5f2bf18fde2edb235587e70c5b0fc5bd4ba955f46b00942c3fc35f" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + list_counter: + dependency: transitive + description: + name: list_counter + sha256: c447ae3dfcd1c55f0152867090e67e219d42fe6d4f2807db4bbe8b8d69912237 + url: "https://pub.dev" + source: hosted + version: "1.0.2" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + url: "https://pub.dev" + source: hosted + version: "0.12.18" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.dev" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + url: "https://pub.dev" + source: hosted + version: "1.17.0" + objective_c: + dependency: transitive + description: + name: objective_c + sha256: b7fb95a6d9a4f009edd63dc5ac69f07420b23a16161c6dd8660290b59c602e8e + url: "https://pub.dev" + source: hosted + version: "9.5.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: ffcf4cf3d6c0b74ac43708d9f56625506e8a68aa935abe9d267a7330f320eb5d + url: "https://pub.dev" + source: hosted + version: "3.0.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825 + url: "https://pub.dev" + source: hosted + version: "2.1.6" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" + url: "https://pub.dev" + source: hosted + version: "2.6.0" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda" + url: "https://pub.dev" + source: hosted + version: "2.1.3" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + pdfium_dart: + dependency: transitive + description: + name: pdfium_dart + sha256: "86e95c66b09f3245b95c4924f2edce8d4f7c9786876e5c5ee8e36b104a94bbb0" + url: "https://pub.dev" + source: hosted + version: "0.2.5" + pdfium_flutter: + dependency: transitive + description: + name: pdfium_flutter + sha256: "0b115c0917aef9cf6bb9c4d47d0efc61d97f44844cd76287c921f997c26cf15d" + url: "https://pub.dev" + source: hosted + version: "0.2.3" + pdfrx: + dependency: "direct main" + description: + name: pdfrx + sha256: acce61944c31bd36f0c3031b1bbf41f59d0b0d4e5e27614fbdc74ff093d55464 + url: "https://pub.dev" + source: hosted + version: "2.4.7" + pdfrx_engine: + dependency: transitive + description: + name: pdfrx_engine + sha256: "8043527245e4c35a2a3b7df8494c066b9efa97fe031945951e46b378318b3d5f" + url: "https://pub.dev" + source: hosted + version: "0.4.5" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675" + url: "https://pub.dev" + source: hosted + version: "7.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + posix: + dependency: transitive + description: + name: posix + sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e + url: "https://pub.dev" + source: hosted + version: "6.5.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + record_use: + dependency: transitive + description: + name: record_use + sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" + url: "https://pub.dev" + source: hosted + version: "0.28.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.dev" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "63896c27e81b28f8cb4e69ead0d3e8f03f1d1e5fc531a3e579cabed6a2c7c9e5" + url: "https://pub.dev" + source: hosted + version: "3.4.0+1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" + url: "https://pub.dev" + source: hosted + version: "0.7.9" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "17bc677f0b301615530dd1d67e0a9828cafa2d0b6b6eae4cd3679b7eac4a273c" + url: "https://pub.dev" + source: hosted + version: "6.3.30" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" + url: "https://pub.dev" + source: hosted + version: "3.2.5" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34" + url: "https://pub.dev" + source: hosted + version: "2.4.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" + url: "https://pub.dev" + source: hosted + version: "3.1.5" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "5f37239c4851efcef929cea7824e76df7f2f0970aef85d66bbc430afa40e72f0" + url: "https://pub.dev" + source: hosted + version: "15.3.0" + web: + dependency: "direct main" + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + word_count: + dependency: transitive + description: + name: word_count + sha256: "98ccd8ef6d614bcf11a7e6d39d43d08193a3a42d360104234018d1dfb86c413d" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" + url: "https://pub.dev" + source: hosted + version: "6.6.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.11.0 <4.0.0" + flutter: ">=3.41.0" diff --git a/pubspec.yaml b/pubspec.yaml index f557aee..190594e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -9,14 +9,16 @@ environment: flutter: ">=3.35.0" dependencies: + characters: ^1.4.1 epub_pro: ^5.6.0 flutter: sdk: flutter flutter_html: ^3.0.0 # flutter_html 3.0.0 uses the private matches API removed in html 0.15.7. html: 0.15.6 - # 2.4.8 requires the PDF engine fixes for nullable native cache access. - pdfrx: ^2.4.8 + # 2.4.8 requires meta 1.18, conflicting with Flutter 3.41.2's SDK pin. + pdfrx: ^2.4.7 + web: ^1.1.1 dev_dependencies: flutter_test: @@ -28,6 +30,9 @@ dev_dependencies: # The following section is specific to Flutter packages. flutter: + assets: + - assets/epub_worker.js + - assets/epub_worker.NOTICES # To add assets to your package, add an assets section, like this: # assets: diff --git a/test/controller/reader_controller_test.dart b/test/controller/reader_controller_test.dart index 57f942b..4d6f4e3 100644 --- a/test/controller/reader_controller_test.dart +++ b/test/controller/reader_controller_test.dart @@ -222,7 +222,7 @@ void main() { expect(controller.buildViewport(FakeBuildContext()), isA()); }); - test('serializes overlapping loads and leaves the second ready', () async { + test('a new load completes without waiting for an obsolete load', () async { final firstDocument = makeDocument('first'); final secondDocument = makeDocument('second'); final firstGate = Completer(); @@ -254,11 +254,13 @@ void main() { expect(controller.snapshot.status, ReaderStatus.loading); expect(controller.snapshot.document, same(secondDocument)); - expect(secondEngine.loadedDocuments, isEmpty); - + await secondLoad; + expect(firstEngine.isDisposed, isTrue); + expect(controller.snapshot.document, same(secondDocument)); + expect(controller.snapshot.status, ReaderStatus.ready); + expect(firstEngine.activeLoadCount, 1); firstGate.complete(); await firstLoad; - await secondLoad; expect(firstEngine.loadedDocuments, [firstDocument]); expect(secondEngine.loadedDocuments, [secondDocument]); diff --git a/test/engine/epub_reader_engine_test.dart b/test/engine/epub_reader_engine_test.dart index 0f50843..d110964 100644 --- a/test/engine/epub_reader_engine_test.dart +++ b/test/engine/epub_reader_engine_test.dart @@ -6,6 +6,7 @@ import 'package:html/parser.dart' as html_parser; import 'package:papyrus_reader/papyrus_reader.dart'; import '../support/synthetic_epub.dart'; +import '../support/in_process_epub_worker.dart'; void main() { ReaderDocument document(Uint8List bytes, {String id = 'epub'}) { @@ -17,6 +18,39 @@ void main() { } group('EpubReaderEngine', () { + test('spine order is independent of a reordered TOC', () async { + final engine = testEpubEngine(); + await engine.load( + document(syntheticEpub(reversedToc: true)), + preferences: const ReaderPreferences(), + ); + expect(engine.currentChapterHtml, contains('Chapter One')); + expect( + (engine.snapshot.toc.first.locator as EpubReaderLocator).spineIndex, + 2, + ); + await engine.goNext(); + expect(engine.currentChapterHtml, contains('Chapter Two')); + await engine.goTo(engine.snapshot.toc.first.locator); + expect(engine.currentChapterHtml, contains('Chapter Three')); + }); + + test('TOC fragment anchors restore a position inside the chapter', () async { + final engine = testEpubEngine(); + await engine.load( + document( + syntheticEpub( + secondChapterBody: + '

Text before the target.

Part A

After the target.

', + ), + ), + preferences: const ReaderPreferences(), + ); + await engine.goTo(engine.snapshot.toc.first.children.single.locator); + final locator = await engine.currentLocator() as EpubReaderLocator; + expect(locator.spineIndex, 1); + expect(locator.textOffset, greaterThan(0)); + }); test( 'lazily loads a valid EPUB and builds nested table of contents', () async { @@ -29,7 +63,7 @@ void main() { return syntheticEpub(); }, ); - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); expect(loads, 0); await engine.load(book, preferences: const ReaderPreferences()); @@ -46,7 +80,7 @@ void main() { ); test('restores, navigates, and publishes CFI locators', () async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); final book = document(syntheticEpub()); final restored = EpubReaderLocator( cfi: 'epubcfi(/6/4!/4/1:0)', @@ -107,7 +141,7 @@ void main() { }); test('maps continuous progress across spine and local progress', () async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub()), preferences: const ReaderPreferences(), @@ -130,7 +164,7 @@ void main() { }); test('rejects invalid continuous progress', () async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub()), preferences: const ReaderPreferences(), @@ -145,7 +179,7 @@ void main() { }); test('rejects an out-of-bounds restored locator', () async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await expectLater( engine.load( @@ -169,7 +203,7 @@ void main() { }); test('maps malformed and fixed-layout books to stable errors', () async { - final malformed = EpubReaderEngine(); + final malformed = testEpubEngine(); await expectLater( malformed.load( document(Uint8List.fromList([1, 2, 3])), @@ -184,7 +218,7 @@ void main() { ), ); - final fixed = EpubReaderEngine(); + final fixed = testEpubEngine(); await expectLater( fixed.load( document(syntheticEpub(fixedLayout: true)), @@ -201,7 +235,7 @@ void main() { }); test('applies preference changes to the ready snapshot', () async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub()), preferences: const ReaderPreferences(), @@ -220,7 +254,7 @@ void main() { 'clears pagination cache when documents and chapters change', () async { final paginator = TrackingEpubPaginator(); - final engine = EpubReaderEngine(paginator: paginator); + final engine = testEpubEngine(paginator: paginator); await engine.load( document(syntheticEpub(), id: 'first'), @@ -240,7 +274,7 @@ void main() { 'failed chapter navigation preserves the ready chapter state', () async { final paginator = TrackingEpubPaginator(); - final engine = EpubReaderEngine(paginator: paginator); + final engine = testEpubEngine(paginator: paginator); await engine.load( document(syntheticEpub(corruptSecondChapter: true)), preferences: const ReaderPreferences(), @@ -261,7 +295,7 @@ void main() { test('failed initial chapter load leaves the engine idle', () async { final paginator = TrackingEpubPaginator(); - final engine = EpubReaderEngine(paginator: paginator); + final engine = testEpubEngine(paginator: paginator); final restored = EpubReaderLocator( cfi: 'epubcfi(/6/4!/4/1:0)', spineIndex: 1, @@ -292,7 +326,7 @@ void main() { 'failed replacement load preserves the ready document state', () async { final paginator = TrackingEpubPaginator(); - final engine = EpubReaderEngine(paginator: paginator); + final engine = testEpubEngine(paginator: paginator); await engine.load( document(syntheticEpub(), id: 'ready'), preferences: const ReaderPreferences(), @@ -330,7 +364,7 @@ void main() { test( 'sanitizes active content and resource-loading URLs with a DOM', () async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub(malicious: true)), preferences: const ReaderPreferences(), @@ -396,7 +430,7 @@ void main() { testWidgets( 'scroll viewport renders sanitized EPUB content and local image', (tester) async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub(malicious: true)), preferences: const ReaderPreferences( @@ -410,7 +444,7 @@ void main() { child: Builder(builder: engine.buildViewport), ), ); - await tester.pump(); + await tester.pumpAndSettle(); expect(find.text('Chapter One'), findsOneWidget); expect(find.byType(Image), findsOneWidget); @@ -422,7 +456,7 @@ void main() { testWidgets('paginated viewport splits content into bounded pages', ( tester, ) async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub(longChapter: true)), preferences: const ReaderPreferences( @@ -450,7 +484,7 @@ void main() { testWidgets('paginated text blocks preserve sanitized semantic content', ( tester, ) async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document( syntheticEpub( @@ -486,7 +520,7 @@ void main() { final blocks = tester .widgetList(find.byType(Text)) - .map((text) => text.data) + .map((text) => text.data ?? text.textSpan?.toPlainText()) .whereType() .toList(); @@ -496,17 +530,16 @@ void main() { 'Before nested', 'Inner block', 'After', - 'List one', - 'List two', + '• List one', + '• List two', 'Quoted words', 'line one\n line two', - 'Heading', - 'Cell value', + 'Heading | Cell value', ]); }); testWidgets('paginated viewport publishes page progression', (tester) async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub(longChapter: true)), preferences: const ReaderPreferences( @@ -537,7 +570,7 @@ void main() { testWidgets( 'paginated viewport restores and updates the visual page from locator progress', (tester) async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub(longChapter: true)), initialLocator: EpubReaderLocator( @@ -595,7 +628,7 @@ void main() { testWidgets( 'scroll viewport restores visual offset and publishes scroll progression', (tester) async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub(longChapter: true)), initialLocator: EpubReaderLocator( @@ -621,16 +654,11 @@ void main() { ); await tester.pumpAndSettle(); - final scrollView = tester.widget( - find.byType(SingleChildScrollView), - ); + final scrollView = tester.widget(find.byType(ListView)); final position = scrollView.controller!.position; expect(position.pixels, closeTo(position.maxScrollExtent * 0.5, 1)); - await tester.drag( - find.byType(SingleChildScrollView), - const Offset(0, -300), - ); + await tester.drag(find.byType(ListView), const Offset(0, -300)); await tester.pumpAndSettle(); final locator = await engine.currentLocator() as EpubReaderLocator; @@ -643,7 +671,7 @@ void main() { testWidgets('scroll viewport publishes the final ballistic progression', ( tester, ) async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub(longChapter: true)), preferences: const ReaderPreferences(layoutMode: ReaderLayoutMode.scroll), @@ -661,16 +689,10 @@ void main() { ); await tester.pumpAndSettle(); - final scrollView = tester.widget( - find.byType(SingleChildScrollView), - ); + final scrollView = tester.widget(find.byType(ListView)); final position = scrollView.controller!.position; - await tester.fling( - find.byType(SingleChildScrollView), - const Offset(0, -300), - 1800, - ); + await tester.fling(find.byType(ListView), const Offset(0, -300), 1800); await tester.pumpAndSettle(); final locator = await engine.currentLocator() as EpubReaderLocator; @@ -682,7 +704,7 @@ void main() { testWidgets( 'total progression stays continuous through the final spine items', (tester) async { - final engine = EpubReaderEngine(); + final engine = testEpubEngine(); await engine.load( document(syntheticEpub(longChapter: true)), preferences: const ReaderPreferences( @@ -704,10 +726,7 @@ void main() { await tester.pumpWidget(viewport()); await tester.pumpAndSettle(); - await tester.drag( - find.byType(SingleChildScrollView), - const Offset(0, -100000), - ); + await tester.drag(find.byType(ListView), const Offset(0, -100000)); await tester.pumpAndSettle(); var locator = await engine.currentLocator() as EpubReaderLocator; @@ -723,10 +742,7 @@ void main() { await tester.pumpWidget(viewport()); await tester.pumpAndSettle(); - await tester.drag( - find.byType(SingleChildScrollView), - const Offset(0, -100000), - ); + await tester.drag(find.byType(ListView), const Offset(0, -100000)); await tester.pumpAndSettle(); locator = await engine.currentLocator() as EpubReaderLocator; diff --git a/test/engine/epub_rich_layout_test.dart b/test/engine/epub_rich_layout_test.dart new file mode 100644 index 0000000..5db9772 --- /dev/null +++ b/test/engine/epub_rich_layout_test.dart @@ -0,0 +1,164 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:papyrus_reader/papyrus_reader.dart'; +import 'package:papyrus_reader/src/engine/epub/epub_rich_layout.dart'; +import 'package:papyrus_reader/src/engine/epub/worker/epub_content.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + testWidgets('measured fragments match the rendered Material reader text', ( + tester, + ) async { + tester.view.physicalSize = const Size(1280, 850); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + final content = collectEpubContent( + List.generate( + 25, + (index) => + '

Passage $index. Reading should feel calm on a small phone and a wide desktop. ' + 'A page turn keeps its place, while emphasis and meaning ' + 'remain part of the story. Resize the window or change the typeface to try reflow.

', + ).join(), + ); + final blocks = [ + for (final json in content['blocks'] as List) + EpubContentBlock(Map.from(json as Map)), + ]; + const preferences = ReaderPreferences(); + final pages = (await tester.runAsync( + () => layoutEpubChapter( + blocks, + contentSize: const Size(592, 662), + preferences: preferences, + textScaler: TextScaler.noScaling, + direction: TextDirection.ltr, + cancelled: () => false, + ), + ))!; + for (final page in pages) { + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: Align( + alignment: Alignment.topLeft, + child: SizedBox( + width: 592, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + for (final fragment in page.fragments) + Padding( + padding: EdgeInsets.only( + bottom: fragment.spacing(preferences), + ), + child: buildEpubFragment(fragment, preferences), + ), + ], + ), + ), + ), + ), + ), + ); + final textWidgets = find.byType(Text); + var height = 0.0; + for (var i = 0; i < page.fragments.length; i++) { + final rendered = tester.getSize(textWidgets.at(i)).height; + expect(rendered, closeTo(page.fragments[i].height, 1)); + height += rendered + page.fragments[i].spacing(preferences); + } + expect(height, lessThanOrEqualTo(663)); + } + }); + + test( + 'long rich paragraphs preserve every character across page boundaries', + () async { + final paragraph = List.filled( + 250, + 'A👩🏽‍🚀 café 中文 line of text. ', + ).join(); + final content = collectEpubContent('

$paragraph

'); + final blocks = [ + for (final json in content['blocks'] as List) + EpubContentBlock(Map.from(json as Map)), + ]; + final pages = await layoutEpubChapter( + blocks, + contentSize: const Size(260, 310), + preferences: const ReaderPreferences(), + textScaler: TextScaler.noScaling, + direction: TextDirection.ltr, + cancelled: () => false, + ); + expect(pages.length, greaterThan(3)); + final rendered = pages + .expand((page) => page.fragments) + .map( + (f) => f.block + .span(const ReaderPreferences(), start: f.start, end: f.end) + .toPlainText(), + ) + .join(); + expect(rendered, paragraph); + for (final page in pages) { + var used = 0.0; + for (final fragment in page.fragments) { + final painter = TextPainter( + text: fragment.block.span( + const ReaderPreferences(), + start: fragment.start, + end: fragment.end, + ), + textDirection: TextDirection.ltr, + )..layout(maxWidth: 260); + used += painter.height + fragment.spacing(const ReaderPreferences()); + painter.dispose(); + } + expect( + used, + lessThanOrEqualTo(311), + reason: 'Rendered content must fit its page', + ); + } + }, + ); + + test( + 'content offsets and styles survive reflow and anchored navigation', + () async { + final content = collectEpubContent( + '

Heading

Before italic bold

', + ); + final blocks = [ + for (final json in content['blocks'] as List) + EpubContentBlock(Map.from(json as Map)), + ]; + expect((content['anchors'] as Map)['target'], 15); + final paragraph = blocks.last.span(const ReaderPreferences()); + expect( + paragraph.children!.whereType().any( + (s) => s.style?.fontStyle == FontStyle.italic, + ), + isTrue, + ); + expect( + paragraph.children!.whereType().any( + (s) => s.style?.fontWeight == FontWeight.bold, + ), + isTrue, + ); + final locator = EpubReaderLocator( + cfi: 'epubcfi(/6/2)', + spineIndex: 0, + localProgression: .3, + totalProgression: .1, + textOffset: 15, + anchor: 'target', + ); + expect(ReaderLocator.fromJson(locator.toJson()), locator); + }, + ); +} diff --git a/test/engine/epub_worker_test.dart b/test/engine/epub_worker_test.dart new file mode 100644 index 0000000..a57b3aa --- /dev/null +++ b/test/engine/epub_worker_test.dart @@ -0,0 +1,118 @@ +import 'dart:typed_data'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:papyrus_reader/papyrus_reader.dart'; +import 'package:papyrus_reader/src/engine/epub/worker/epub_worker.dart'; + +import '../support/synthetic_epub.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + Future> listText(String html) async { + final worker = await createEpubWorker(); + addTearDown(worker.dispose); + await worker.open(syntheticEpub(firstChapterBody: html)); + final chapter = await worker.chapter(0); + return (chapter['blocks'] as List) + .map( + (block) => (block['runs'] as List) + .map((run) => run['text'] as String) + .join(), + ) + .toList(); + } + + test('native worker preserves ordered list start and item values', () async { + expect( + await listText(''' +
  1. Alpha
  2. Beta
  3. Gamma
+
  • Unordered
  • Another bullet
+'''), + ['3. Alpha', '8. Beta', '9. Gamma', '• Unordered', '• Another bullet'], + ); + }); + + test( + 'native worker keeps nested and separate list counters independent', + () async { + expect( + await listText(''' +
  1. Outer
    • Bullet
      1. Inner
      2. Inner next
  2. Outer next
+
  1. New list
+'''), + [ + '7. Outer', + '• Bullet', + '1. Inner', + '2. Inner next', + '8. Outer next', + '1. New list', + ], + ); + }, + ); + + test('native worker preserves reversed and invalid list numbering', () async { + expect( + await listText(''' +
  1. First
  2. Reset
  3. Last
+
  1. Negative
  2. Negative next
+
  1. Fallback
  2. Fallback next
+'''), + [ + '3. First', + '5. Reset', + '4. Last', + '-1. Negative', + '-2. Negative next', + '1. Fallback', + '2. Fallback next', + ], + ); + }); + + test( + 'native document worker opens and prepares chapters independently', + () async { + final worker = await createEpubWorker(); + addTearDown(worker.dispose); + final metadata = await worker.open(syntheticEpub()); + expect(metadata['count'], 3); + final first = await worker.chapter(0); + expect(first['html'], contains('Chapter One')); + expect(first['blocks'], isNotEmpty); + final second = await worker.chapter(1); + expect(second['html'], contains('Chapter Two')); + expect(await worker.chapter(0), first); + }, + ); + + test( + 'native worker errors stay typed and disposal rejects requests', + () async { + final worker = await createEpubWorker(); + await expectLater( + worker.open(Uint8List.fromList([1, 2, 3])), + throwsA( + isA().having( + (e) => e.code, + 'code', + ReaderErrorCode.invalidDocument, + ), + ), + ); + await expectLater( + worker.open(syntheticEpub(fixedLayout: true)), + throwsA( + isA().having( + (e) => e.code, + 'code', + ReaderErrorCode.unsupportedFixedLayout, + ), + ), + ); + worker.dispose(); + await expectLater(worker.chapter(0), throwsA(isA())); + }, + ); +} diff --git a/test/engine/pdf_reader_engine_test.dart b/test/engine/pdf_reader_engine_test.dart index 3dbb3ef..774a27f 100644 --- a/test/engine/pdf_reader_engine_test.dart +++ b/test/engine/pdf_reader_engine_test.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:typed_data'; import 'package:flutter/widgets.dart'; @@ -15,6 +16,114 @@ void main() { } group('PdfReaderEngine', () { + testWidgets('turns whole spreads only in paginated mode', (tester) async { + tester.view.physicalSize = const Size(1200, 800); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + final facade = FakePdfFacade(pageCount: 5); + final engine = PdfReaderEngine(facadeFactory: (_) async => facade); + addTearDown(engine.dispose); + await engine.load(document(), preferences: const ReaderPreferences()); + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: Builder(builder: engine.buildViewport), + ), + ); + expect(facade.lastConfiguration!.facingPages, isTrue); + await engine.goNext(); + expect((await engine.currentLocator() as PdfReaderLocator).pageIndex, 2); + await engine.goNext(); + expect((await engine.currentLocator() as PdfReaderLocator).pageIndex, 4); + await engine.goPrevious(); + expect((await engine.currentLocator() as PdfReaderLocator).pageIndex, 2); + await engine.updatePreferences( + const ReaderPreferences(layoutMode: ReaderLayoutMode.scroll), + ); + await engine.goNext(); + expect((await engine.currentLocator() as PdfReaderLocator).pageIndex, 3); + }); + + test( + 'failed replacement retains the current PDF and releases its candidate', + () async { + final original = FakePdfFacade(pageCount: 3); + final invalid = FakePdfFacade(pageCount: 0); + var loads = 0; + final engine = PdfReaderEngine( + facadeFactory: (_) async => loads++ == 0 ? original : invalid, + ); + await engine.load(document(), preferences: const ReaderPreferences()); + await engine.goNext(); + await expectLater( + engine.load(document(), preferences: const ReaderPreferences()), + throwsA(isA()), + ); + expect((engine.snapshot.locator as PdfReaderLocator).pageIndex, 1); + expect(original.disposeCount, 0); + expect(invalid.disposeCount, 1); + await engine.goNext(); + expect(original.shownPages.last, 2); + engine.dispose(); + expect(original.disposeCount, 1); + }, + ); + + test('closing while a PDF opens releases the late document', () async { + final gate = Completer(); + final started = Completer(); + final facade = FakePdfFacade(pageCount: 1); + final engine = PdfReaderEngine( + facadeFactory: (_) { + started.complete(); + return gate.future; + }, + ); + final loading = engine.load( + document(), + preferences: const ReaderPreferences(), + ); + final assertion = expectLater(loading, throwsA(isA())); + await started.future; + engine.dispose(); + gate.complete(facade); + await assertion; + expect(facade.disposeCount, 1); + }); + + testWidgets('uses available width and records intra-page position', ( + tester, + ) async { + final facade = FakePdfFacade(pageCount: 1); + final engine = PdfReaderEngine(facadeFactory: (_) async => facade); + addTearDown(engine.dispose); + await engine.load( + document(), + preferences: const ReaderPreferences( + columnMode: ReaderColumnMode.double, + ), + ); + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: Center( + child: SizedBox( + width: 390, + child: Builder(builder: engine.buildViewport), + ), + ), + ), + ); + expect(facade.lastConfiguration!.facingPages, isFalse); + facade.lastConfiguration!.onPositionChanged!(0, 0.345678); + final locator = await engine.currentLocator() as PdfReaderLocator; + expect(locator.pageOffset, 0.3457); + expect(locator.totalProgression, 0.3457); + await engine.goToProgress(0.75); + expect(facade.shownOffsets.last, 0.75); + }); + test( 'loads outline and restores a page locator through the facade', () async { @@ -50,7 +159,9 @@ void main() { }, ); - test('navigates with bounds and publishes visible page changes', () async { + testWidgets('navigates with bounds and publishes visible page changes', ( + tester, + ) async { final facade = FakePdfFacade(pageCount: 3); final engine = PdfReaderEngine(facadeFactory: (_) async => facade); await engine.load( @@ -75,7 +186,12 @@ void main() { ), ); - engine.buildViewport(FakeBuildContext()); + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: Builder(builder: engine.buildViewport), + ), + ); facade.emitVisiblePage(2); expect((engine.snapshot.locator! as PdfReaderLocator).pageIndex, 2); expect( @@ -184,33 +300,37 @@ void main() { }, ); - test( - 'updates single/facing and light/dark viewport configuration', - () async { - final facade = FakePdfFacade(pageCount: 2); - final engine = PdfReaderEngine(facadeFactory: (_) async => facade); - await engine.load(document(), preferences: const ReaderPreferences()); - const updated = ReaderPreferences( - layoutMode: ReaderLayoutMode.scroll, - columnMode: ReaderColumnMode.double, - brightness: Brightness.dark, - backgroundColor: Color(0xff101010), - ); + testWidgets('updates single/facing and light/dark viewport configuration', ( + tester, + ) async { + final facade = FakePdfFacade(pageCount: 2); + final engine = PdfReaderEngine(facadeFactory: (_) async => facade); + await engine.load(document(), preferences: const ReaderPreferences()); + const updated = ReaderPreferences( + layoutMode: ReaderLayoutMode.scroll, + columnMode: ReaderColumnMode.double, + brightness: Brightness.dark, + backgroundColor: Color(0xff101010), + ); - await engine.updatePreferences(updated); + await engine.updatePreferences(updated); - expect(engine.snapshot.preferences, updated); - final viewport = engine.buildViewport(FakeBuildContext()); - expect(viewport, same(facade.viewport)); - expect(facade.lastConfiguration!.facingPages, isTrue); - expect( - facade.lastConfiguration!.backgroundColor, - const Color(0xff101010), - ); - expect(facade.lastConfiguration!.brightness, Brightness.dark); - expect(facade.lastConfiguration!.layoutMode, ReaderLayoutMode.scroll); - }, - ); + expect(engine.snapshot.preferences, updated); + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: Builder(builder: engine.buildViewport), + ), + ); + expect(find.byKey(const ValueKey('fake-pdf-viewport')), findsOneWidget); + expect(facade.lastConfiguration!.facingPages, isTrue); + expect( + facade.lastConfiguration!.backgroundColor, + const Color(0xff101010), + ); + expect(facade.lastConfiguration!.brightness, Brightness.dark); + expect(facade.lastConfiguration!.layoutMode, ReaderLayoutMode.scroll); + }); }); test( @@ -311,10 +431,12 @@ void main() { ), ); - expect(paginated.scrollPhysics, isA()); + expect(paginated.scrollPhysics, isNull); + expect(paginated.normalizeMatrix, isNotNull); expect(paginated.layoutPages, isNotNull); expect(continuous.scrollPhysics, isA()); expect(continuous.layoutPages, isNull); + expect(continuous.normalizeMatrix, isNull); expect(facing.layoutPages, isNotNull); }, ); @@ -335,6 +457,61 @@ void main() { expect(find.byKey(const ValueKey('pdf-child')), findsOneWidget); }); + test( + 'paginated slots expose only the current page or spread at fit zoom', + () { + for (final size in [ + const Size(390, 844), + const Size(1280, 700), + const Size(700, 360), + ]) { + for (final facing in [false, true]) { + final layout = buildPaginatedPdfLayout( + [const Size(300, 420), const Size(360, 600), const Size(300, 420)], + viewportSize: size, + facingPages: facing, + ); + final step = facing ? 2 : 1; + for (var index = 0; index < 3; index += step) { + final row = pdfSpreadRect(layout, index, facing); + final zoom = + ((size.width - 16) / row.width) < + ((size.height - 16) / row.height) + ? (size.width - 16) / row.width + : (size.height - 16) / row.height; + final visible = Rect.fromCenter( + center: row.center, + width: size.width / zoom, + height: size.height / zoom, + ); + for (var page = 0; page < 3; page++) { + if (page < index || page >= index + step) { + expect( + visible.overlaps(layout.pageLayouts[page]), + isFalse, + reason: 'A spare margin must not expose another spread', + ); + } + } + } + } + } + }, + ); + + testWidgets('appearance changes retain the PDF viewer element', ( + tester, + ) async { + const key = ValueKey('persistent-pdf'); + const child = SizedBox(key: key); + await tester.pumpWidget(applyPdfBrightness(Brightness.light, child)); + final before = tester.element(find.byKey(key)); + await tester.pumpWidget(applyPdfBrightness(Brightness.dark, child)); + expect(tester.element(find.byKey(key)), same(before)); + await tester.pumpWidget(applyPdfBrightness(Brightness.light, child)); + expect(tester.element(find.byKey(key)), same(before)); + }); + testWidgets('delegates PDF viewport construction to the facade', ( tester, ) async { @@ -398,7 +575,7 @@ final class FakePdfMetadataDocument implements PdfMetadataDocument { } } -final class FakePdfFacade implements PdfFacade { +final class FakePdfFacade implements PdfFacade, DisposablePdfFacade { FakePdfFacade({required this.pageCount, this.outline = const []}); @override @@ -412,6 +589,10 @@ final class FakePdfFacade implements PdfFacade { final List shownOffsets = []; PdfViewportConfiguration? lastConfiguration; int viewportBuildCount = 0; + int disposeCount = 0; + + @override + void dispose() => disposeCount++; @override Widget buildViewport(PdfViewportConfiguration configuration) { diff --git a/test/presentation/epub_reading_flow_test.dart b/test/presentation/epub_reading_flow_test.dart new file mode 100644 index 0000000..e17ad7b --- /dev/null +++ b/test/presentation/epub_reading_flow_test.dart @@ -0,0 +1,219 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:papyrus_reader/papyrus_reader.dart'; + +import '../support/in_process_epub_worker.dart'; +import '../support/synthetic_epub.dart'; + +void main() { + testWidgets('hiding chrome keeps a long EPUB on its current content offset', ( + tester, + ) async { + final semantics = tester.ensureSemantics(); + tester.view.devicePixelRatio = 1; + tester.view.physicalSize = const Size(1280, 850); + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + final engine = testEpubEngine(); + await tester.pumpWidget( + MaterialApp( + home: PapyrusReader( + registry: ReaderEngineRegistry([ + ReaderEngineRegistration( + formats: const {ReaderFormat.epub}, + factory: () => engine, + ), + ]), + document: ReaderDocument( + id: 'focus', + format: ReaderFormat.epub, + loadBytes: () async => syntheticEpub(longChapter: true), + ), + ), + ), + ); + await tester.pumpAndSettle(); + await engine.goNext(); + await tester.pumpAndSettle(); + await engine.goNext(); + await tester.pumpAndSettle(); + final before = await engine.currentLocator() as EpubReaderLocator; + expect(before.textOffset, greaterThan(0)); + await tester.tap(find.byTooltip('Hide controls')); + await tester.pumpAndSettle(); + expect( + (await engine.currentLocator() as EpubReaderLocator).textOffset, + before.textOffset, + ); + expect( + tester.widget(find.byType(PageView)).controller!.page, + greaterThan(0), + ); + await tester.sendKeyEvent(LogicalKeyboardKey.escape); + await tester.pumpAndSettle(); + expect(find.byTooltip('Hide controls'), findsOneWidget); + expect( + (await engine.currentLocator() as EpubReaderLocator).textOffset, + before.textOffset, + ); + expect( + tester.widget(find.byType(PageView)).controller!.page, + greaterThan(0), + ); + semantics.dispose(); + }); + + testWidgets('arrow navigation stays focused across consecutive chapters', ( + tester, + ) async { + final engine = testEpubEngine(); + final registry = ReaderEngineRegistry([ + ReaderEngineRegistration( + formats: const {ReaderFormat.epub}, + factory: () => engine, + ), + ]); + await tester.pumpWidget( + MaterialApp( + home: PapyrusReader( + registry: registry, + document: ReaderDocument( + id: 'keyboard', + format: ReaderFormat.epub, + loadBytes: () async => syntheticEpub(), + ), + ), + ), + ); + await tester.pumpAndSettle(); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + await tester.pumpAndSettle(); + expect((await engine.currentLocator() as EpubReaderLocator).spineIndex, 1); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + await tester.pumpAndSettle(); + expect((await engine.currentLocator() as EpubReaderLocator).spineIndex, 2); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowLeft); + await tester.pumpAndSettle(); + expect((await engine.currentLocator() as EpubReaderLocator).spineIndex, 1); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowLeft); + await tester.pumpAndSettle(); + expect((await engine.currentLocator() as EpubReaderLocator).spineIndex, 0); + }); + + testWidgets( + 'page controls, reflow and chapter boundaries preserve the reading position', + (tester) async { + tester.view.devicePixelRatio = 1; + tester.view.physicalSize = const Size(360, 640); + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + final engine = testEpubEngine(); + await engine.load( + ReaderDocument( + id: 'long', + format: ReaderFormat.epub, + loadBytes: () async => syntheticEpub(longChapter: true), + ), + preferences: const ReaderPreferences(), + ); + await tester.pumpWidget( + MaterialApp( + home: Scaffold(body: Builder(builder: engine.buildViewport)), + ), + ); + await tester.pumpAndSettle(); + + await engine.goNext(); + await tester.pumpAndSettle(); + final secondPage = await engine.currentLocator() as EpubReaderLocator; + expect( + secondPage.spineIndex, + 0, + reason: 'Next turns a page instead of skipping a chapter', + ); + expect(secondPage.textOffset, greaterThan(0)); + await engine.updatePreferences(const ReaderPreferences(fontSize: 25)); + await tester.pumpAndSettle(); + expect( + (await engine.currentLocator() as EpubReaderLocator).textOffset, + secondPage.textOffset, + ); + + tester.view.physicalSize = const Size(1280, 800); + await tester.pumpAndSettle(); + expect( + (await engine.currentLocator() as EpubReaderLocator).textOffset, + secondPage.textOffset, + ); + expect(tester.takeException(), isNull); + await tester.binding.handleSystemMessage({'type': 'fontsChange'}); + await tester.pumpAndSettle(); + expect( + (await engine.currentLocator() as EpubReaderLocator).textOffset, + secondPage.textOffset, + reason: 'Late font loading must remeasure without losing position', + ); + await engine.goToProgress(1 / 3); + await tester.pumpAndSettle(); + await engine.goPrevious(); + await tester.pumpAndSettle(); + final previousChapterEnd = + await engine.currentLocator() as EpubReaderLocator; + expect(previousChapterEnd.spineIndex, 0); + expect(previousChapterEnd.localProgression, 1); + await engine.goNext(); + await tester.pumpAndSettle(); + expect( + (await engine.currentLocator() as EpubReaderLocator).spineIndex, + 1, + ); + }, + ); + + testWidgets( + 'single column stays readable beside a desktop panel and at large text sizes', + (tester) async { + final engine = testEpubEngine(); + await engine.load( + ReaderDocument( + id: 'long', + format: ReaderFormat.epub, + loadBytes: () async => syntheticEpub(longChapter: true), + ), + preferences: const ReaderPreferences(), + ); + for (final size in [ + const Size(320, 480), + const Size(700, 360), + const Size(1200, 800), + ]) { + tester.view.devicePixelRatio = 1; + tester.view.physicalSize = size; + await tester.pumpWidget( + MaterialApp( + builder: (context, child) => MediaQuery( + data: MediaQuery.of( + context, + ).copyWith(textScaler: const TextScaler.linear(2)), + child: child!, + ), + home: Scaffold( + body: Row( + children: [ + Expanded(child: Builder(builder: engine.buildViewport)), + if (size.width > 1000) const SizedBox(width: 320), + ], + ), + ), + ), + ); + await tester.pumpAndSettle(); + expect(find.byType(PageView), findsOneWidget); + expect(tester.takeException(), isNull); + } + tester.view.resetPhysicalSize(); + tester.view.resetDevicePixelRatio(); + }, + ); +} diff --git a/test/presentation/papyrus_reader_test.dart b/test/presentation/papyrus_reader_test.dart index ec91447..d727bbd 100644 --- a/test/presentation/papyrus_reader_test.dart +++ b/test/presentation/papyrus_reader_test.dart @@ -99,6 +99,410 @@ void main() { ); } + testWidgets('custom snapshot viewports refresh without losing state', ( + tester, + ) async { + final engine = _UiReaderEngine( + viewportBuilder: (context, snapshot) => _SnapshotViewport( + progression: + (snapshot.locator as EpubReaderLocator?)?.totalProgression ?? 0, + ), + ); + final controller = controllerFor([engine]); + addTearDown(controller.dispose); + await pumpReader( + tester, + document: document('Custom viewport'), + controller: controller, + ); + await tester.pumpAndSettle(); + final viewport = find.byType(_SnapshotViewport); + final state = tester.state(viewport); + expect(find.text('Custom position 0'), findsOneWidget); + + await controller.goToProgress(0.4); + await tester.pumpAndSettle(); + expect(find.text('Custom position 40'), findsOneWidget); + expect(tester.state(viewport), same(state)); + + await controller.goToProgress(0.8); + await tester.pumpAndSettle(); + expect(find.text('Custom position 80'), findsOneWidget); + expect(tester.state(viewport), same(state)); + + await tester.tap(find.byTooltip('Hide controls')); + await tester.pumpAndSettle(); + expect(find.text('Custom position 80'), findsOneWidget); + expect(tester.state(viewport), same(state)); + }); + + testWidgets('sidebar meets the toolbar border without an empty gap', ( + tester, + ) async { + final controller = controllerFor([_UiReaderEngine()]); + addTearDown(controller.dispose); + await pumpReader( + tester, + document: document('Border'), + controller: controller, + size: const Size(1200, 1000), + ); + await tester.pumpAndSettle(); + await tester.tap(find.byTooltip('Reading settings')); + await tester.pumpAndSettle(); + final toolbar = tester.getRect( + find.byKey(const ValueKey('reader-toolbar')), + ); + final border = tester.getRect( + find.byKey(const ValueKey('reader-toolbar-border')), + ); + final panel = tester.getRect( + find.byKey(const ValueKey('reader-side-panel')), + ); + expect(border.top, toolbar.bottom); + expect(border.height, 1); + expect(panel.top, border.bottom); + // The panel header keeps its border; text settings have no separator. + expect( + find.descendant( + of: find.byType(ListView), + matching: find.byType(Divider), + ), + findsNothing, + ); + }); + + testWidgets( + 'focus mode retains viewport and navigation on phone and desktop', + (tester) async { + for (final width in [390.0, 1200.0]) { + final engine = _UiReaderEngine(); + final controller = controllerFor([engine]); + final book = document('Focus $width'); + await pumpReader( + tester, + document: book, + controller: controller, + size: Size(width, 844), + ); + await tester.pumpAndSettle(); + final viewport = find.byKey(const ValueKey('reader-viewport')); + final element = tester.element(viewport); + final height = tester.getSize(viewport).height; + if (width > 720) { + await tester.tap(find.byTooltip('Reading settings')); + await tester.pumpAndSettle(); + } + await tester.tap(find.byTooltip('Hide controls')); + await tester.pumpAndSettle(); + expect(find.byKey(const ValueKey('reader-toolbar')), findsNothing); + expect( + find.byKey(const ValueKey('reader-progress-controls')), + findsNothing, + ); + expect(find.byKey(const ValueKey('reader-side-panel')), findsNothing); + expect(find.byTooltip('Show controls'), findsOneWidget); + expect(tester.element(viewport), same(element)); + expect(tester.getSize(viewport), Size(width, 844)); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + await tester.pumpAndSettle(); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowLeft); + await tester.pumpAndSettle(); + expect(engine.goNextCallCount, 1); + expect(engine.goPreviousCallCount, 1); + final locator = controller.snapshot.locator; + await tester.tap(find.byTooltip('Show controls')); + await tester.pumpAndSettle(); + expect(tester.element(viewport), same(element)); + expect(tester.getSize(viewport).height, height); + expect(controller.snapshot.locator, locator); + await tester.tap(find.byTooltip('Hide controls')); + await tester.pumpAndSettle(); + await tester.sendKeyEvent(LogicalKeyboardKey.escape); + await tester.pumpAndSettle(); + expect(find.byTooltip('Reading settings'), findsOneWidget); + expect(find.byTooltip('Next'), findsOneWidget); + // Opening a different book must restore its exit/navigation controls. + await tester.tap(find.byTooltip('Hide controls')); + await tester.pumpAndSettle(); + await pumpReader( + tester, + document: document('Replacement'), + controller: controllerFor([_UiReaderEngine()]), + size: Size(width, 844), + ); + await tester.pumpAndSettle(); + expect(find.byTooltip('Hide controls'), findsOneWidget); + final replacement = tester + .widget(find.byType(PapyrusReader)) + .controller!; + await tester.pumpWidget(const SizedBox.shrink()); + replacement.dispose(); + controller.dispose(); + } + }, + ); + + testWidgets( + 'focus mode recovers page keys and Escape from a parked scope', + (tester) async { + final engine = _UiReaderEngine(); + final controller = controllerFor([engine]); + addTearDown(controller.dispose); + await pumpReader( + tester, + document: document('Parked focus'), + controller: controller, + ); + await tester.pumpAndSettle(); + await tester.tap(find.byTooltip('Hide controls')); + await tester.pumpAndSettle(); + FocusManager.instance.rootScope.requestFocus(); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + await tester.pumpAndSettle(); + expect(engine.goNextCallCount, 1); + FocusManager.instance.rootScope.requestFocus(); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.escape); + await tester.pumpAndSettle(); + expect(find.byTooltip('Hide controls'), findsOneWidget); + }, + ); + + testWidgets('focus mode does not intercept keys from a covering dialog', ( + tester, + ) async { + final engine = _UiReaderEngine(); + final controller = controllerFor([engine]); + addTearDown(controller.dispose); + await pumpReader( + tester, + document: document('Dialog focus'), + controller: controller, + ); + await tester.pumpAndSettle(); + await tester.tap(find.byTooltip('Hide controls')); + await tester.pumpAndSettle(); + final context = tester.element(find.byType(PapyrusReader)); + final dialog = showDialog( + context: context, + builder: (_) => const AlertDialog(content: TextField(autofocus: true)), + ); + await tester.pumpAndSettle(); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + await tester.pump(); + expect(engine.goNextCallCount, 0); + FocusManager.instance.rootScope.requestFocus(); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + await tester.pump(); + expect(engine.goNextCallCount, 0); + Navigator.of(context).pop(); + await tester.pumpAndSettle(); + await dialog; + expect(find.byTooltip('Show controls'), findsOneWidget); + }); + + testWidgets( + 'the controls toggle retains one accessible button through reflow', + (tester) async { + final semantics = tester.ensureSemantics(); + final controller = controllerFor([_UiReaderEngine()]); + addTearDown(controller.dispose); + await pumpReader( + tester, + document: document('Accessible focus'), + controller: controller, + ); + await tester.pumpAndSettle(); + final before = tester + .getSemantics(find.bySemanticsLabel('Hide controls')) + .id; + await tester.tap(find.byTooltip('Hide controls')); + await tester.pumpAndSettle(); + expect( + tester.getSemantics(find.bySemanticsLabel('Show controls')).id, + before, + ); + await tester.sendKeyEvent(LogicalKeyboardKey.escape); + await tester.pumpAndSettle(); + expect( + tester.getSemantics(find.bySemanticsLabel('Hide controls')).id, + before, + ); + semantics.dispose(); + }, + ); + + testWidgets( + 'custom toolbars can enter focus mode and restore with Escape', + (tester) async { + final controller = controllerFor([_UiReaderEngine()]); + addTearDown(controller.dispose); + await pumpReader( + tester, + document: document('Custom focus'), + controller: controller, + builders: ReaderUiBuilders( + toolbar: (context, state) => TextButton( + onPressed: state.toggleControls, + child: Text(state.controlsVisible ? 'Focus' : 'Controls'), + ), + ), + ); + await tester.pumpAndSettle(); + await tester.tap(find.text('Focus')); + await tester.pumpAndSettle(); + expect(find.text('Focus'), findsNothing); + expect(find.byTooltip('Show controls'), findsOneWidget); + await tester.sendKeyEvent(LogicalKeyboardKey.escape); + await tester.pumpAndSettle(); + expect(find.text('Focus'), findsOneWidget); + }, + ); + + testWidgets('all settings dropdown routes follow the reading appearance', ( + tester, + ) async { + for (final brightness in [Brightness.light, Brightness.dark]) { + for (final width in [600.0, 1200.0]) { + final controller = controllerFor([_UiReaderEngine()]); + await pumpReader( + tester, + document: document('Menu colors'), + controller: controller, + size: Size(width, 1000), + themeMode: brightness == Brightness.light + ? ThemeMode.dark + : ThemeMode.light, + initialPreferences: ReaderPreferences(brightness: brightness), + ); + await tester.pumpAndSettle(); + await tester.tap(find.byTooltip('Reading settings')); + await tester.pumpAndSettle(); + for (final pair in [ + ('System', 'Monospace'), + ('Paginated', 'Continuous scroll'), + ('Automatic', 'Double'), + ]) { + await tester.ensureVisible(find.text(pair.$1).first); + await tester.tap(find.text(pair.$1).first); + await tester.pumpAndSettle(); + final option = find.text(pair.$2).last; + final menuTheme = Theme.of(tester.element(option)); + expect(menuTheme.brightness, brightness); + expect(menuTheme.canvasColor, menuTheme.colorScheme.surface); + final text = tester.widget( + find + .descendant(of: option, matching: find.byType(RichText)) + .first, + ); + final foreground = text.text.style!.color!.computeLuminance(); + final background = menuTheme.canvasColor.computeLuminance(); + expect( + (math.max(foreground, background) + .05) / + (math.min(foreground, background) + .05), + greaterThanOrEqualTo(4.5), + ); + await tester.tap(option); + await tester.pumpAndSettle(); + } + await tester.pumpWidget(const SizedBox.shrink()); + controller.dispose(); + } + } + }); + + testWidgets( + 'settings text follows reader appearance in opposite app themes', + (tester) async { + for (final brightness in [Brightness.dark, Brightness.light]) { + final engine = _UiReaderEngine(); + final controller = controllerFor([engine]); + final preferences = ReaderPreferences(brightness: brightness); + await pumpReader( + tester, + document: document('Opposite theme'), + controller: controller, + size: const Size(1200, 800), + themeMode: brightness == Brightness.dark + ? ThemeMode.light + : ThemeMode.dark, + initialPreferences: preferences, + ); + await tester.pumpAndSettle(); + await tester.tap(find.byTooltip('Reading settings')); + await tester.pumpAndSettle(); + final label = find.text('Page appearance'); + final theme = Theme.of(tester.element(label)); + expect(theme.brightness, brightness); + final rich = tester.widget( + find.descendant(of: label, matching: find.byType(RichText)), + ); + expect(rich.text.style!.color, theme.colorScheme.onSurface); + final dropdown = find.text('Paginated'); + final dropdownText = tester.widget( + find + .descendant(of: dropdown, matching: find.byType(RichText)) + .first, + ); + expect(dropdownText.text.style!.color, theme.colorScheme.onSurface); + for (final chip in tester.widgetList( + find.byType(ChoiceChip), + )) { + final label = find.text((chip.label as Text).data!); + final text = tester.widget( + find.descendant(of: label, matching: find.byType(RichText)).first, + ); + final foreground = text.text.style!.color!.computeLuminance(); + final background = chip.color!.resolve({ + if (chip.selected) WidgetState.selected, + })!.computeLuminance(); + final contrast = + (math.max(foreground, background) + .05) / + (math.min(foreground, background) + .05); + expect( + contrast, + greaterThanOrEqualTo(4.5), + reason: 'Every appearance option must stay readable', + ); + } + await tester.pumpWidget(const SizedBox.shrink()); + controller.dispose(); + } + }, + ); + + testWidgets( + 'an open mobile panel updates its theme when Night is selected', + (tester) async { + final engine = _UiReaderEngine(); + final controller = controllerFor([engine]); + addTearDown(controller.dispose); + await pumpReader( + tester, + document: document('Live sheet'), + controller: controller, + size: const Size(600, 1000), + ); + await tester.pumpAndSettle(); + await tester.tap(find.byTooltip('Reading settings')); + await tester.pumpAndSettle(); + await tester.ensureVisible(find.text('Night')); + await tester.tap(find.text('Night')); + await tester.pumpAndSettle(); + final label = find.text('Page appearance'); + final theme = Theme.of(tester.element(label)); + expect(theme.brightness, Brightness.dark); + final rich = tester.widget( + find.descendant(of: label, matching: find.byType(RichText)), + ); + expect(rich.text.style!.color, theme.colorScheme.onSurface); + expect(tester.takeException(), isNull); + }, + ); + testWidgets('moves from a usable loading state to the engine viewport', ( tester, ) async { @@ -338,7 +742,7 @@ void main() { expect(tester.takeException(), isNull); }); - testWidgets('wide chrome reserves a stable persistent panel', ( + testWidgets('wide chrome uses the full viewport until a panel is opened', ( tester, ) async { final engine = _UiReaderEngine(); @@ -355,6 +759,7 @@ void main() { final viewportBefore = tester.getSize( find.byKey(const ValueKey('reader-viewport')), ); + expect(find.byKey(const ValueKey('reader-side-panel')), findsNothing); await tester.tap(find.byTooltip('Table of contents')); await tester.pumpAndSettle(); final viewportAfter = tester.getSize( @@ -364,11 +769,18 @@ void main() { expect(find.byType(BottomSheet), findsNothing); expect(find.byKey(const ValueKey('reader-side-panel')), findsOneWidget); expect(find.text('Chapter one'), findsOneWidget); - expect(viewportAfter, viewportBefore); + expect(viewportAfter.width, lessThan(viewportBefore.width)); + expect(viewportAfter.height, viewportBefore.height); await tester.tap(find.byTooltip('Reading settings')); await tester.pumpAndSettle(); expect(find.text('Reading mode'), findsOneWidget); + expect( + tester.getSize(find.byKey(const ValueKey('reader-viewport'))), + viewportAfter, + ); + await tester.tap(find.byTooltip('Close panel')); + await tester.pumpAndSettle(); expect( tester.getSize(find.byKey(const ValueKey('reader-viewport'))), viewportBefore, @@ -868,11 +1280,12 @@ void main() { ); semantics.dispose(); }); - }, skip: true); + }); } final class _UiReaderEngine extends ReaderEngine { _UiReaderEngine({ + this.viewportBuilder, this.loadGate, this.loadFailure, this.nextGates = const [], @@ -888,6 +1301,7 @@ final class _UiReaderEngine extends ReaderEngine { }); final Completer? loadGate; + final Widget Function(BuildContext, ReaderSnapshot)? viewportBuilder; final ReaderException? loadFailure; final List> nextGates; final ReaderException? nextFailure; @@ -941,6 +1355,9 @@ final class _UiReaderEngine extends ReaderEngine { @override Widget buildViewport(BuildContext context) { + if (viewportBuilder case final builder?) { + return builder(context, snapshot); + } return const ColoredBox( key: ValueKey('reader-viewport'), color: Colors.transparent, @@ -1068,3 +1485,18 @@ final class _UiReaderEngine extends ReaderEngine { super.dispose(); } } + +final class _SnapshotViewport extends StatefulWidget { + const _SnapshotViewport({required this.progression}); + + final double progression; + + @override + State<_SnapshotViewport> createState() => _SnapshotViewportState(); +} + +final class _SnapshotViewportState extends State<_SnapshotViewport> { + @override + Widget build(BuildContext context) => + Text('Custom position ${(widget.progression * 100).toStringAsFixed(0)}'); +} diff --git a/test/support/fake_reader_engine.dart b/test/support/fake_reader_engine.dart index 11aca1e..45e0d74 100644 --- a/test/support/fake_reader_engine.dart +++ b/test/support/fake_reader_engine.dart @@ -77,6 +77,7 @@ class FakeReaderEngine extends ReaderEngine { throw failure; } + if (isDisposed) return; snapshot = ReaderReadySnapshot( document: document, preferences: preferences, diff --git a/test/support/in_process_epub_worker.dart b/test/support/in_process_epub_worker.dart new file mode 100644 index 0000000..314beac --- /dev/null +++ b/test/support/in_process_epub_worker.dart @@ -0,0 +1,42 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:papyrus_reader/papyrus_reader.dart'; +import 'package:papyrus_reader/src/engine/epub/worker/epub_processor.dart'; +import 'package:papyrus_reader/src/engine/epub/worker/epub_worker.dart'; + +/// Deterministic transport for Flutter's fake clock. Production transports are +/// exercised independently so widget tests need no real isolate scheduling. +EpubReaderEngine testEpubEngine({EpubPaginator? paginator}) { + final engine = EpubReaderEngine( + paginator: paginator, + workerFactory: () async => InProcessEpubWorker(), + ); + addTearDown(engine.dispose); + return engine; +} + +final class InProcessEpubWorker implements EpubWorker { + final EpubProcessor _processor = EpubProcessor(); + bool disposed = false; + @override + Future> request(String command, Object? argument) async { + final response = await processEpubMessage(_processor, { + 'id': 1, + 'command': command, + 'argument': argument, + }); + if (response['error'] != null) { + throw ReaderException( + response['error'] == 'unsupportedFixedLayout' + ? ReaderErrorCode.unsupportedFixedLayout + : ReaderErrorCode.invalidDocument, + response['message'] as String, + ); + } + return Map.from(response['result'] as Map); + } + + @override + void dispose() { + disposed = true; + } +} diff --git a/test/support/synthetic_epub.dart b/test/support/synthetic_epub.dart index e322206..3adc89b 100644 --- a/test/support/synthetic_epub.dart +++ b/test/support/synthetic_epub.dart @@ -6,6 +6,8 @@ Uint8List syntheticEpub({ bool malicious = false, bool longChapter = false, String? firstChapterBody, + String? secondChapterBody, + bool reversedToc = false, bool corruptSecondChapter = false, }) { final repeated = longChapter @@ -91,7 +93,7 @@ Uint8List syntheticEpub({ Chapter One - + Part A @@ -99,7 +101,7 @@ Uint8List syntheticEpub({ Chapter Two - + '''), @@ -112,7 +114,7 @@ Uint8List syntheticEpub({ 'OEBPS/text/chapter2.xhtml': utf8.encode( ''' Two -

Chapter Two

${longChapter ? repeated : '

Second chapter body.

'}''', +${secondChapterBody ?? '

Chapter Two

${longChapter ? repeated : '

Second chapter body.

'}'}''', ), 'OEBPS/text/chapter3.xhtml': utf8.encode( ''' diff --git a/tool/browser/package-lock.json b/tool/browser/package-lock.json new file mode 100644 index 0000000..267c72d --- /dev/null +++ b/tool/browser/package-lock.json @@ -0,0 +1,42 @@ +{ + "name": "papyrus-reader-browser-checks", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "papyrus-reader-browser-checks", + "devDependencies": { + "playwright": "1.63.0" + } + }, + "node_modules/playwright": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", + "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", + "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + } + } +} diff --git a/tool/browser/package.json b/tool/browser/package.json new file mode 100644 index 0000000..5c267e8 --- /dev/null +++ b/tool/browser/package.json @@ -0,0 +1,7 @@ +{ + "name": "papyrus-reader-browser-checks", + "private": true, + "type": "module", + "scripts": { "test": "node smoke.mjs" }, + "devDependencies": { "playwright": "1.63.0" } +} diff --git a/tool/browser/smoke.mjs b/tool/browser/smoke.mjs new file mode 100644 index 0000000..fb80bdf --- /dev/null +++ b/tool/browser/smoke.mjs @@ -0,0 +1,349 @@ +import assert from 'node:assert/strict'; +import { createServer } from 'node:http'; +import { readFile, mkdir, mkdtemp, writeFile, rm } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { dirname, extname, resolve, sep } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { chromium } from 'playwright'; + +const reader = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); +const dist = resolve(reader, 'example/build/web'); +await readFile(resolve(dist, 'index.html')); // Build the example first. +const types = { '.html': 'text/html', '.js': 'text/javascript', '.json': 'application/json', + '.wasm': 'application/wasm', '.ttf': 'font/ttf', '.png': 'image/png', '.svg': 'image/svg+xml' }; +const server = createServer(async (request, response) => { + const path = resolve(dist, `.${decodeURIComponent(new URL(request.url, 'http://local').pathname)}`); + if (path !== dist && !path.startsWith(dist + sep)) { response.writeHead(403).end(); return; } + try { + const file = path === dist ? resolve(dist, 'index.html') : path; + const bytes = await readFile(file); + response.writeHead(200, { 'Content-Type': types[extname(file)] ?? 'application/octet-stream' }); + response.end(bytes); + } catch { response.writeHead(404).end(); } +}); +await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)); +const origin = `http://127.0.0.1:${server.address().port}`; +const browser = await chromium.launch({ executablePath: process.env.PAPYRUS_CHROME_EXECUTABLE }); +const temp = await mkdtemp(resolve(tmpdir(), 'papyrus-reader-')); +try { + const page = await browser.newPage({ viewport: { width: 1280, height: 850 } }); + const errors = []; + let workersClosed = 0; + page.on('pageerror', error => errors.push(error.message)); + page.on('worker', worker => worker.on('close', () => workersClosed++)); + await page.goto(origin); + await page.locator('flt-semantics-placeholder').evaluate(element => element.click()); + + // Exercise the actual packaged Worker protocol independently of Flutter's + // widget-test fake clock and mock asset channel. + const protocol = await page.evaluate(async () => { + const script = await (await fetch('assets/packages/papyrus_reader/assets/epub_worker.js')).text(); + const url = URL.createObjectURL(new Blob([script], { type: 'text/javascript' })); + const worker = new Worker(url); + URL.revokeObjectURL(url); + let id = 0; + const pending = new Map(); + worker.onmessage = event => { + const message = JSON.parse(event.data); + pending.get(message.id)(message); + pending.delete(message.id); + }; + const request = (command, argument) => new Promise((resolve, reject) => { + const key = ++id; + const timeout = setTimeout(() => { + pending.delete(key); + reject(new Error(`Worker ${command} timed out`)); + }, 15000); + pending.set(key, message => { clearTimeout(timeout); resolve(message); }); + if (argument instanceof Uint8Array) worker.postMessage({ id: key, command, bytes: argument }, [argument.buffer]); + else worker.postMessage({ id: key, command, argument }); + }); + const bytes = new Uint8Array(await (await fetch('assets/assets/reading_lab.epub')).arrayBuffer()); + try { + const opened = await request('open', bytes); + const chapter = await request('chapter', 0); + const invalid = await request('open', new Uint8Array([1, 2, 3])); + return { count: opened.result.count, blocks: chapter.result.blocks.length, error: invalid.error }; + } finally { worker.terminate(); } + }); + assert.equal(protocol.count, 2); + assert.ok(protocol.blocks > 20); + assert.equal(protocol.error, 'invalidDocument'); + + await page.getByRole('button', { name: 'Explore layouts', exact: true }).click(); + await page.getByRole('button', { name: 'Next', exact: true }).waitFor(); + await page.waitForFunction(() => document.body.innerText.includes('Passage 1.')); + await page.getByRole('button', { name: 'Next', exact: true }).click(); + await page.waitForFunction(() => !document.body.innerText.includes('Passage 1. Reading')); + assert.ok(!await page.locator('body').innerText().then(text => text.includes('After the Rain')), + 'Next must turn a page before crossing chapters'); + + const screenshot = async name => { + if (!process.env.PAPYRUS_SCREENSHOT_DIR) return; + const folder = resolve(process.env.PAPYRUS_SCREENSHOT_DIR); + await mkdir(folder, { recursive: true }); + await page.screenshot({ path: resolve(folder, `${name}.png`) }); + }; + const settle = () => page.evaluate(() => new Promise(resolve => { + let frames = 0; + const tick = () => ++frames >= 60 ? resolve() : requestAnimationFrame(tick); + requestAnimationFrame(tick); + })); + await settle(); + const passage = /Passage (\d+)\. Reading/.exec(await page.locator('body').innerText()); + assert.ok(passage, 'The next spread must contain readable paragraphs'); + const paragraph = page.getByText(`Passage ${passage[1]}. Reading should feel calm on a small phone and a wide desktop. ` + + 'A page turn keeps its place, while emphasis and meaning remain part of the story. ' + + 'Resize the window or change the typeface to try reflow.', { exact: true }).first(); + const beforeWheel = await paragraph.boundingBox(); + await page.mouse.move(160, 300); + await page.mouse.wheel(0, 600); + await settle(); + const afterWheel = await paragraph.boundingBox(); + assert.ok(beforeWheel && afterWheel && Math.abs(beforeWheel.y - afterWheel.y) < 1, + 'A normal paginated column must fit without hidden vertical overflow'); + await screenshot('desktop'); + const hideControls = async () => { + await page.getByRole('button', { name: 'Hide controls', exact: true }).click(); + await settle(); + for (const name of ['Back', 'Reading settings', 'Table of contents', 'Next', 'Previous']) { + assert.equal(await page.getByRole('button', { name, exact: true }).count(), 0, + `${name} must be hidden in focus mode`); + } + await page.getByRole('button', { name: 'Show controls', exact: true }).waitFor(); + }; + await hideControls(); + const focusedParagraph = await paragraph.boundingBox(); + assert.ok(focusedParagraph && focusedParagraph.y < 850 && + focusedParagraph.y + focusedParagraph.height > 0, + 'Expanding the reading area must keep the current EPUB paragraph visible'); + await screenshot('desktop-focus'); + await page.keyboard.press('Escape'); + await settle(); + await page.getByRole('button', { name: 'Hide controls', exact: true }).waitFor(); + await page.setViewportSize({ width: 390, height: 844 }); + await settle(); + await page.getByRole('button', { name: 'Reading settings', exact: true }).click(); + await page.getByRole('button', { name: 'Close panel', exact: true }).waitFor(); + await settle(); + await screenshot('mobile-settings'); + await page.mouse.move(190, 650); + await page.mouse.wheel(0, 600); + await settle(); + await page.getByLabel('Night', { exact: true }).click(); + await settle(); + await page.getByRole('button', { name: 'Close panel', exact: true }).click(); + await settle(); + await screenshot('mobile-night'); + await hideControls(); + await screenshot('mobile-focus'); + await page.getByRole('button', { name: 'Show controls', exact: true }).click(); + await settle(); + await page.setViewportSize({ width: 700, height: 360 }); + await settle(); + await screenshot('landscape'); + await page.getByRole('button', { name: 'Back', exact: true }).click(); + await page.getByRole('button', { name: 'Open a book', exact: true }).waitFor(); + await settle(); + + // File-picker integration lets the example review real documents, including + // malformed files. Loading errors must keep Back reachable. + const openFile = async path => { + const chooser = page.waitForEvent('filechooser'); + // Flutter route transitions do not expose DOM animation state to Playwright. + // Let the entrance transition finish before sending its next pointer event. + await settle(); + await page.getByRole('button', { name: 'Open a book', exact: true }).click(); + await settle(); + await (await chooser).setFiles(path); + }; + await openFile(resolve(reader, 'example/assets/reading_lab.epub')); + await page.getByRole('button', { name: 'Next', exact: true }).waitFor(); + await page.waitForFunction(() => document.body.innerText.includes('At the Gate')); + await page.getByRole('button', { name: 'Back', exact: true }).click(); + await settle(); + const invalid = resolve(temp, 'invalid.epub'); + await writeFile(invalid, Buffer.from([1, 2, 3])); + await openFile(invalid); + await page.getByRole('button', { name: 'Try again', exact: true }).waitFor(); + await page.getByRole('button', { name: 'Back', exact: true }).click(); + await settle(); + assert.ok(workersClosed >= 3, 'Document workers must close with their sessions'); + + // Crossing chapters must retain keyboard focus in focus mode without pointer refocus. + await page.setViewportSize({ width: 1280, height: 850 }); + await page.getByRole('button', { name: 'Read EPUB', exact: true }).click(); + await page.getByText('At the Gate', { exact: true }).first().waitFor(); + await settle(); + await hideControls(); + for (let turn = 0; turn < 3; turn++) { + await page.keyboard.press('ArrowRight'); + await page.getByText('After the Rain', { exact: true }).first().waitFor(); + await settle(); + await page.keyboard.press('ArrowLeft'); + await page.getByText('At the Gate', { exact: true }).first().waitFor(); + await settle(); + } + await page.keyboard.press('Escape'); + await settle(); + await page.getByRole('button', { name: 'Back', exact: true }).click(); + await settle(); + await page.setViewportSize({ width: 700, height: 360 }); + + await page.getByRole('button', { name: 'Read PDF', exact: true }).click(); + await page.getByRole('button', { name: 'Next', exact: true }).waitFor(); + await settle(); + await screenshot('pdf-initial'); + await page.getByLabel(/Page 1 of 3/).waitFor(); + await settle(); + await page.getByRole('button', { name: 'Next', exact: true }).click(); + await page.getByLabel(/Page 2 of 3/).waitFor(); + await settle(); + await screenshot('pdf'); + await hideControls(); + await page.getByText('Page 2 of 3.', { exact: true }).waitFor(); + await screenshot('pdf-focus'); + await page.keyboard.press('ArrowRight'); + await page.getByText('Page 3 of 3.', { exact: true }).waitFor(); + await settle(); + await page.keyboard.press('ArrowLeft'); + await page.getByText('Page 2 of 3.', { exact: true }).waitFor(); + await settle(); + await page.getByRole('button', { name: 'Show controls', exact: true }).click(); + await settle(); + await page.getByLabel(/Page 2 of 3/).waitFor(); + await page.getByRole('button', { name: 'Back', exact: true }).click(); + await settle(); + await page.getByRole('button', { name: 'Read PDF', exact: true }).click(); + await page.getByLabel(/Page 2 of 3/).waitFor(); + await settle(); + await page.getByRole('button', { name: 'Reading settings', exact: true }).click(); + await page.getByRole('button', { name: 'Close panel', exact: true }).waitFor(); + await settle(); + assert.equal(await page.getByLabel('Typeface', { exact: false }).count(), 0, + 'PDF must not advertise reflowable font controls'); + + await page.getByRole('button', { name: 'Close panel', exact: true }).click(); + await settle(); + await page.setViewportSize({ width: 1280, height: 850 }); + await settle(); + await page.getByRole('button', { name: 'Reading settings', exact: true }).click(); + await settle(); + const select = async (current, target) => { + await page.getByRole('button', { name: new RegExp(current) }).click(); + await settle(); + await page.getByRole('menuitem', { name: target, exact: true }).click(); + await settle(); + }; + await screenshot('pdf-wide-settings'); + await select('Automatic', 'Single'); + await page.getByLabel('Night', { exact: true }).click(); + await settle(); + await screenshot('pdf-night-single'); + const pdfPage = () => page.getByRole('group', { name: 'Page 2', exact: true }); + const singleBefore = await pdfPage().boundingBox(); + assert.ok(singleBefore && singleBefore.x >= 0 && singleBefore.x + singleBefore.width <= 920, + 'Single PDF page must fit the width left by the settings panel'); + await select('Single', 'Double'); + await screenshot('pdf-night-double'); + await select('Double', 'Single'); + const singleAfter = await pdfPage().boundingBox(); + assert.ok(singleAfter && Math.abs(singleBefore.width - singleAfter.width) < 1, + 'Returning to Single must refit instead of retaining spread zoom'); + await page.getByLabel('Light', { exact: true }).click(); + await settle(); + const lightBounds = await pdfPage().boundingBox(); + assert.ok(lightBounds && Math.abs(singleAfter.width - lightBounds.width) < 1, + 'Appearance changes must retain the PDF scale'); + await screenshot('pdf-light-single'); + await page.getByRole('button', { name: 'Close panel', exact: true }).click(); + await settle(); + await page.mouse.move(450, 350); + await page.mouse.wheel(0, 180); + await page.getByLabel(/Page 3 of 3/).waitFor(); + await settle(); + await page.mouse.wheel(0, -180); + await page.getByLabel(/Page 2 of 3/).waitFor(); + await settle(); + await page.getByRole('button', { name: 'Reading settings', exact: true }).click(); + await settle(); + await select('Paginated', 'Continuous scroll'); + await page.getByRole('button', { name: 'Close panel', exact: true }).click(); + await settle(); + // The page semantics group is clipped to the viewport; measure actual text + // inside it to distinguish scrolling from a stationary viewport container. + const pdfText = () => page.getByText('Page 2 of 3.', { exact: true }); + const continuousBefore = await pdfText().boundingBox(); + await page.mouse.move(450, 350); + await page.mouse.wheel(0, 100); + await settle(); + const continuousAfter = await pdfText().boundingBox(); + assert.ok(continuousBefore && continuousAfter && continuousAfter.y < continuousBefore.y - 5, + 'Continuous PDF mode must move within the page rather than snapping to the next page'); + await page.getByLabel(/Page 2 of 3/).waitFor(); + await screenshot('pdf-continuous'); + await page.getByRole('button', { name: 'Reading settings', exact: true }).click(); + await settle(); + const scrollSingle = await pdfText().boundingBox(); + await select('Single', 'Double'); + await select('Double', 'Single'); + await page.getByLabel('Night', { exact: true }).click(); + await settle(); + const scrollNight = await pdfText().boundingBox(); + assert.ok(scrollSingle && scrollNight && Math.abs(scrollSingle.width - scrollNight.width) < 1, + 'Continuous Single must refit after column changes and preserve scale on Night'); + await screenshot('pdf-continuous-night'); + await page.mouse.move(450, 350); + await page.mouse.wheel(180, 0); + await settle(); + const scrollHorizontal = await pdfText().boundingBox(); + assert.ok(scrollHorizontal && Math.abs(scrollHorizontal.x - scrollNight.x) < 1, + 'A width-fitted continuous page must not require horizontal scrolling'); + + // Inspect opened popup routes under the opposite app/reader appearance. + // Closed dropdown text alone cannot detect a stale host canvas color. + await page.getByRole('button', { name: 'Close panel', exact: true }).click(); + await settle(); + await page.getByRole('button', { name: 'Back', exact: true }).click(); + await settle(); + await page.getByRole('button', { name: 'Use dark theme', exact: true }).click(); + await settle(); + await page.getByRole('button', { name: 'Read EPUB', exact: true }).click(); + await page.getByRole('button', { name: 'Reading settings', exact: true }).waitFor(); + await settle(); + await page.getByRole('button', { name: 'Reading settings', exact: true }).click(); + await settle(); + await page.getByLabel('Light', { exact: true }).click(); + await settle(); + await page.getByRole('button', { name: /Reading mode/ }).click(); + await page.getByRole('menuitem', { name: 'Continuous scroll', exact: true }).waitFor(); + await settle(); + await screenshot('dark-app-light-reader-menu'); + await page.getByRole('menuitem', { name: 'Continuous scroll', exact: true }).click(); + await settle(); + await page.getByRole('button', { name: /Typeface/ }).click(); + await page.getByRole('menuitem', { name: 'Sans serif', exact: true }).waitFor(); + await settle(); + await screenshot('dark-app-light-reader-typeface'); + await page.getByRole('menuitem', { name: 'Sans serif', exact: true }).click(); + await settle(); + await page.getByLabel('Night', { exact: true }).click(); + await settle(); + await page.getByRole('button', { name: /Reading mode/ }).click(); + await page.getByRole('menuitem', { name: 'Paginated', exact: true }).waitFor(); + await settle(); + await screenshot('dark-app-night-reader-menu'); + await page.getByRole('menuitem', { name: 'Paginated', exact: true }).click(); + await settle(); + await page.getByRole('button', { name: 'Close panel', exact: true }).click(); + await settle(); + await page.getByRole('button', { name: 'Back', exact: true }).click(); + await settle(); + await page.getByRole('button', { name: 'Use light theme', exact: true }).waitFor(); + assert.deepEqual(errors, []); + console.log('Browser checks passed: worker protocol, focus mode and chapter keyboard focus, responsive settings, local files, cleanup, PDF pagination/scroll, column/appearance refitting and opened menus under opposite app themes.'); +} finally { + await browser.close(); + await rm(temp, { recursive: true, force: true }); + await new Promise(resolve => server.close(resolve)); +} diff --git a/tool/build_epub_worker.sh b/tool/build_epub_worker.sh new file mode 100755 index 0000000..855cec1 --- /dev/null +++ b/tool/build_epub_worker.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "$0")/.." +if [ -x ../tools/dart ]; then + dart_cli=../tools/dart +else + dart_cli=dart +fi +if [ "${1:-}" = "--check" ]; then + worker_temp=$(mktemp -d) + trap 'rm -rf "$worker_temp"' EXIT + "$dart_cli" compile js -O2 --no-source-maps -o "$worker_temp/epub_worker.js" tool/epub_worker.dart + if ! cmp -s assets/epub_worker.js "$worker_temp/epub_worker.js"; then + echo 'EPUB worker asset is stale. Run tool/build_epub_worker.sh.' >&2 + exit 1 + fi +else + "$dart_cli" compile js -O2 --no-source-maps -o assets/epub_worker.js tool/epub_worker.dart + rm -f assets/epub_worker.js.deps +fi diff --git a/tool/epub_worker.dart b/tool/epub_worker.dart new file mode 100644 index 0000000..2106e58 --- /dev/null +++ b/tool/epub_worker.dart @@ -0,0 +1,23 @@ +import 'dart:convert'; +import 'dart:js_interop'; + +import 'package:web/web.dart' as web; + +import 'package:papyrus_reader/src/engine/epub/worker/epub_processor.dart'; + +@JS('self') +external web.DedicatedWorkerGlobalScope get scope; + +void main() { + final processor = EpubProcessor(); + Future queue = Future.value(); + scope.onmessage = ((web.MessageEvent event) { + final request = (event.data.dartify() as Map).cast(); + if (request['bytes'] case final bytes?) request['argument'] = bytes; + queue = queue.then((_) async { + scope.postMessage( + jsonEncode(await processEpubMessage(processor, request)).toJS, + ); + }); + }).toJS; +} diff --git a/tool/generate_example_assets.dart b/tool/generate_example_assets.dart index 7453c70..ba6be41 100644 --- a/tool/generate_example_assets.dart +++ b/tool/generate_example_assets.dart @@ -5,10 +5,22 @@ import 'dart:typed_data'; void main() { final assets = Directory('example/assets')..createSync(recursive: true); File('${assets.path}/the_garden_letter.epub').writeAsBytesSync(_epub()); + File( + '${assets.path}/reading_lab.epub', + ).writeAsBytesSync(_epub(longSample: true)); File('${assets.path}/a_tiny_pdf.pdf').writeAsBytesSync(_pdf()); } -Uint8List _epub() { +Uint8List _epub({bool longSample = false}) { + final longContent = longSample + ? List.generate( + 75, + (i) => + '

Passage ${i + 1}. Reading should feel calm on a small phone and a wide desktop. ' + 'A page turn keeps its place, while emphasis and meaning ' + 'remain part of the story. Resize the window or change the typeface to try reflow.

', + ).join() + : ''; return _zip({ 'mimetype': utf8.encode('application/epub+zip'), 'META-INF/container.xml': utf8.encode(''' @@ -60,6 +72,7 @@ Uint8List _epub() {

Dear friend, the first green shoots have reached the old garden gate.

I left a chair beneath the pear tree, where the afternoon gathers slowly.

This little demo text is dedicated to the public domain.

+ $longContent '''), 'OEBPS/text/two.xhtml': utf8.encode(''' @@ -69,27 +82,34 @@ Uint8List _epub() {

After the Rain

The path shone silver this morning, and every leaf held a small sky.

Come when you can. The book and the quiet corner will be waiting.

+ $longContent '''), }); } Uint8List _pdf() { + const pageCount = 3; + const fontId = 3 + pageCount * 2; final objects = [ '<< /Type /Catalog /Pages 2 0 R >>', - '<< /Type /Pages /Kids [3 0 R] /Count 1 >>', - '<< /Type /Page /Parent 2 0 R /MediaBox [0 0 300 420] ' - '/Resources << /Font << /F1 5 0 R >> >> /Contents 4 0 R >>', - '', + '<< /Type /Pages /Kids [${List.generate(pageCount, (i) => '${3 + i * 2} 0 R').join(' ')}] /Count $pageCount >>', + for (var i = 0; i < pageCount; i++) ...[ + '<< /Type /Page /Parent 2 0 R /MediaBox [0 0 300 420] ' + '/Resources << /Font << /F1 $fontId 0 R >> >> /Contents ${4 + i * 2} 0 R >>', + '', + ], '<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>', ]; - const stream = - 'BT\n/F1 22 Tf\n40 340 Td\n(A Tiny PDF) Tj\n' - '/F1 12 Tf\n0 -34 Td\n(A valid one-page Papyrus demo.) Tj\nET\n'; - objects[3] = - '<< /Length ${ascii.encode(stream).length} >>\n' - 'stream\n$stream' - 'endstream'; + for (var i = 0; i < pageCount; i++) { + final stream = + 'BT\n/F1 22 Tf\n40 340 Td\n(A Tiny PDF) Tj\n' + '/F1 12 Tf\n0 -34 Td\n(Page ${i + 1} of $pageCount.) Tj\nET\n'; + objects[3 + i * 2] = + '<< /Length ${ascii.encode(stream).length} >>\n' + 'stream\n$stream' + 'endstream'; + } final output = StringBuffer('%PDF-1.4\n'); final offsets = [0];